Wie können wir das Objekt in Liste <> in C# filtern?Filterliste <> Objekt ohne foreach Schleife in C# 2.0
Antwort
Lassen Sie uns sagen, dass wir eine List<string>
haben, und Sie wollen nur die Punkte, in denen die Länge der Zeichenfolge größer als 5.
Der folgende Code wird eine List<string>
mit den Ergebnissen zurück:
List<string> myList = new List<string>();
myList.Add("hello");
myList.Add("world!");
myList.Add("one");
myList.Add("large!!");
List<string> resultList = myList.FindAll(delegate(string s) { return s.Length > 5; });
Ergebnisliste wird "Welt" enthalten! und groß!!'. In diesem Beispiel wird anonymous method verwendet. Es kann auch geschrieben werden als:
List<string> myList = new List<string>();
// ..
List<string> resultList = myList.FindAll(OnlyLargerThanFive);
//..
private static bool OnlyLargerThanFive(string s)
{
return s.Length > 5;
}
Der Delegierte oben, OnlyLargerThanFive, auch eine Predicate genannt wird.
neben dem Weg von @Razzie erzählt können Sie auch LINQ verwenden.
List<string> myList = new List<string>();
myList.Add("hello");
myList.Add("world!");
myList.Add("one");
myList.Add("large!!");
var filtered=from s in myList where s.Length > 5 select s;
PS: - ist nur in .NET 3 und höher
Er sprach über C# 2.0, das nicht über LINQ verfügt. Ansonsten sind Sie richtig (obwohl ich die Lambda-Syntax in diesem Beispiel verwenden würde) – Razzie
danke @Razzie Ich habe PS zur Antwort hinzugefügt :) – TheVillageIdiot
Die beste Lösung ist Lambda zu verwenden:
List<Item> l;
l.FindAll(n => n.Something == SomethingElse);
Es kann intern foreach verwenden, aber Sie können‘ t Filtere wirklich, ohne für die ganze Liste zu iterieren.
Frage ist für 2.0, wo Lamda nicht unterstützt wird –
Sorry, tat nicht beachten. – Migol
Sie könnten LINQ verwenden. Ich habe nicht getestet, aber ich glaube, es wird die Elemente meiner Liste der Pastetenfüllungen nur diejenigen zu zeigen, unten filtern, die mit einem „P“ beginnen:
List<string> list = new List<string>();
list.Add("Apple");
list.Add("Peach");
list.Add("Chocolate");
list.Add("Pear");
list.Add("Pumpkin");
list.Add("Cherry");
list.Add("Coconut");
var filteredOnes = from item in list
where item.StartsWith("P")
select item;
Total blies durch die Tatsache, dass der OP C# 2.0 gesagt hatte. Definitiv hat LINQ nicht, aber das würde funktionieren, wenn das OP aktualisiert wird. – itsmatt
Liste <> .Find (das gibt erste übereinstimmende Vorkommen) und List.FindAll() liefert alle übereinstimmenden Vorkommen. Ein Beispiel mit einer Liste von komplexen Typen würden, ist wie folgt:
Ich habe eine Klasse Report:
public class Report
{
public string ReportName;
public ReportColumnList ReportColumnList;
}
und eine Liste des Berichts
List<Report> reportList;
Um Elemente in der Liste zu finden, wo ReportName = 'MyReport', der Code wäre:
string reportName = "MyReport";
List<Report> myReports = reportList.FindAll(delegate(Report obj) { return obj.ReportName == reportName; });
Um den ersten Bericht zu erhalten :
Report rc = reportList.Find(delegate(Report obj) { return obj.ReportName == reportName; });
Beachten Sie, dass das Objekt an den Delegaten übergeben des Typs, mit dem sollte die Liste bevölkert ist.
Sie können LINQ so verwenden.
List<string> List = new List<string> { "i", "am", "using", "LINQ!" };
List<string> result = myList.Where(s => s.Length > 3).ToList();
es funktioniert nur in .net 3 und höher.
- 1. Umgestalten foreach-Schleife zur Liste <T> .ForEach (...)
- 2. php -> foreach Schleife
- 3. C# -Liste <T>. ConvertAll in .NET 2.0
- 4. C# ForEach Schleife (String Deklaration in Schleife)
- 5. Wie foreach Schleife in C#
- 6. Filterliste von Objekt in Rxjava
- 7. Liste <T> vs IEnumerable <T> in foreach
- 8. C# foreach innerhalb einer foreach Schleife
- 9. Zähler in foreach Schleife in C#
- 10. Array-Werte ohne foreach-Schleife erhalten
- 11. Finden Sie den maximalen Wert in Vektor <vector<int>> ohne for-Schleife
- 12. Wann würde ich die Liste <T> .ForEach über eine native foreach-Schleife verwenden?
- 13. C++: String-Funktionen ohne <cstring>
- 14. .Net - Wann ist die Liste <T> .ForEach über eine Standard-foreach-Schleife bevorzugt?
- 15. Convert forEach ohne veraltete for-Schleife?
- 16. C# Foreach-Schleife - Fortfahren Problem
- 17. C# foreach Schleife mit Schlüsselwert
- 18. datastax C# driver IEnumerable <T> foreach optimieren
- 19. Update-Struct in foreach-Schleife in C#
- 20. Hinzufügen von Knoten zu LinkedList <T> in foreach
- 21. Wie eine verschachtelte Dictionary <> Objekte in einer foreach-Schleife für den Zugriff auf
- 22. ohne <stdio.h>
- 23. While-Schleife innerhalb foreach Schleife, die nicht foreach Schleife
- 24. Neustart einer foreach-Schleife in C#?
- 25. Dropdownlist mit foreach-Schleife in C# MVC
- 26. C# konvertieren Dictionary <Objekt, Liste <Object>> JSON
- 27. c: forEach Schleife drucken eckigen Klammern Begrenzer
- 28. Deserialize <![CDATA[x]> In die Klasse Objekt C#
- 29. Datagridview in foreach-Schleife
- 30. Array in foreach Schleife
Schöne Lösung, aber wird dies nicht intern eine Foreach sowieso verwenden? obwohl ich davon ausgehe, dass Kthevar nur meinte, dass er das Iterieren nicht selbst machen wollte. – RobV
Neu bei Lamdas, wie kommt es, dass du meineListe nicht tun kannst.FindAll (l => l.Length> 5) –
@RobV: Es ist ein 'normales' für 'Schleife intern. Korrigiere mich, wenn ich falsch liege, irgendjemand. – Razzie