So viele Linq Antwort, wenn es bereits eine Methode, den Job vorhanden ist (im ersten Kommentar gegeben)
List<T>.FindIndex
eine overload hat, die einen zusätzlichen Indexparameter nimmt aus diesem Index nur zu suchen.
Um das zweite Vorkommen eines Elements zu erhalten, müssen Sie nur diese Überladung mit dem Ergebnis eines "normalen" FindIndex
verwenden.
(Anmerkung: in Probe Ihre Frage des verwendeten Sie a.Text
aber Artikel String sind, so dass keine Text-Eigenschaft ist)
var firstIndex = list.FindIndex (item => item == "Oracle");
if (firstIndex != -1)
{
var secondIndex = list.FindIndex (firstIndex, item => item == "Oracle");
// use secondIndex (can be -1 if there is no second occurrence)
}
Und mit Ihrer Probe Beispiel secondIndex
wird 3
(und nicht 4 wie in Ihrem angegeben Frage, Indizes sind nullbasiert)
Alternativ können Sie, wenn Sie die Ereignisindizes der Reihe nach abrufen möchten, die gleiche Methode verwenden.
// defined here to not have to repeat it
Predicate<string> match = item => item == "Oracle";
for (var index = list.FindIndex (match); index > -1; index = list.FindIndex (index + 1, match))
{
// use index here
}
Oder wenn Sie eine while-Schleife
var index = list.FindIndex (match);
while (index > -1)
{
// use index here
index = list.FindeIndex (index + 1, match);
}
können Sie [einen Startindex geben] (https://msdn.microsoft.com/en-us/library/efasdh0s.aspx) zu 'FindIndex'. Sie können also den ersten Index finden und dann den nächsten finden, indem Sie 'index + 1' übergeben. – Blorgbeard
Ich habe viele solcher Vorkommnisse von übereinstimmenden Elementen, also könnte es helfen, den vorherigen Index zu bekommen und dann nach dem nächsten zu suchen. Lass mich das versuchen. Vielen Dank! –