Ich verwende .NET 3.5 und möchte in der Lage sein, jedes * n
* -te Element aus einer Liste abzurufen. Es stört mich nicht, ob dies mit einem Lambda-Ausdruck oder LINQ erreicht wird.
Bearbeiten
Sieht so aus, als hätte diese Frage eine Menge Debatten ausgelöst (was gut ist, oder?). Die Hauptsache, die ich gelernt habe, ist, dass Sie, wenn Sie glauben, jeden Weg zu kennen (auch so einfach), noch einmal darüber nachdenken!
Antworten:
quelle
Ich weiß, dass es "alte Schule" ist, aber warum nicht einfach eine for-Schleife mit steping = n verwenden?
quelle
Hört sich an wie
würde den Trick machen. Ich sehe keine Notwendigkeit, Linq- oder Lambda-Ausdrücke zu verwenden.
BEARBEITEN:
Mach es
und Sie schreiben auf LINQish-Weise
2. Bearbeitung :
Um es noch LINQish zu machen
quelle
list[i]
stattdessen einfach zurücklist[n-1]
?Sie können die Where-Überladung verwenden, die den Index zusammen mit dem Element übergibt
quelle
Für Schleife
quelle
List<T>
,Count
ist also als billig definiert.Ich bin nicht sicher, ob es mit einem LINQ-Ausdruck möglich ist, aber ich weiß, dass Sie die
Where
Erweiterungsmethode verwenden können, um dies zu tun. Zum Beispiel, um jeden fünften Artikel zu erhalten:Dies wird den ersten Gegenstand und jeden fünften von dort erhalten. Wenn Sie mit dem fünften Element anstelle des ersten beginnen möchten, vergleichen Sie mit 4 anstatt mit 0.
quelle
Ich denke, wenn Sie eine linq-Erweiterung bereitstellen, sollten Sie in der Lage sein, auf der am wenigsten spezifischen Schnittstelle zu arbeiten, also auf IEnumerable. Wenn Sie speziell für große N auf dem neuesten Stand sind, können Sie natürlich eine Überlastung für den indizierten Zugriff bereitstellen. Letzteres macht das Iterieren über große Mengen nicht benötigter Daten überflüssig und ist viel schneller als die Where-Klausel. Wenn Sie beide Überladungen bereitstellen, kann der Compiler die am besten geeignete Variante auswählen.
quelle
Ausgabe
quelle
Imho keine Antwort ist richtig. Alle Lösungen beginnen bei 0. Aber ich möchte das echte n-te Element haben
quelle
@belucha Das gefällt mir, weil der Client-Code sehr gut lesbar ist und der Compiler die effizienteste Implementierung auswählt. Ich würde darauf aufbauen, indem ich die Anforderungen auf
IReadOnlyList<T>
die Division für Hochleistungs-LINQ reduziere und diese speichere:quelle