2015-10-31 16 views
6

Wenn Sie eine Liste von Arrays wie gehabt:Index eines Arrays in Liste des Arrays in C# findet

List<int[]> ListOfArrays = new List<int[]>(); 
ListOfArrays.Add(new int[] { 1, 1 }); 
ListOfArrays.Add(new int[] { 2, 1 }); 

Wie werden Sie den Index finden {2, 1} in der Liste?

Ich möchte keine Iterationsschleife verwenden. Ich möchte eine kurze Methode, wie die von Parimal RaJ schlug ein in Check if string array exists in list of string:

list.Select(ar2 => arr.All(ar2.Contains)).FirstOrDefault(); 

(der obige Code gibt true zurück, wenn Mitglieder einer Array angegebenen String in einer Liste von String-Arrays existieren)

+1

Der einzige Weg, eine Iterationsschleife wird ein Wörterbuch zu vermeiden bzw. eine Hash-Lookup-Tabelle. – xXliolauXx

+0

@xXliolauXx Durch Iteration denke ich, er meint LINQ statt einer Hand geschriebenen Schleife. –

+0

Ist die Reihenfolge des internen Arrays wichtig? –

Antwort

8
var myArr = new int[] { 2, 1 }; 
List<int[]> ListOfArrays = new List<int[]>(); 
ListOfArrays.Add(new int[] { 1, 1 }); 
ListOfArrays.Add(new int[] { 4, 1 }); 
ListOfArrays.Add(new int[] { 1, 1 }); 
ListOfArrays.Add(new int[] { 2, 1 }); 

int index = ListOfArrays.FindIndex(l => Enumerable.SequenceEqual(myArr, l)); 
+2

Sie können es ein bisschen kürzen: 'ListOfArrays.FindIndex (l => l.SequenceEqual (myArr));' –

+2

'ListOfArrays.FindIndex (myArr.SequenceEqual);' sollte auch Arbeit – soon

1

du versuchen:

List<int[]> ListOfArrays = new List<int[]>(); 
ListOfArrays.Add(new int[] { 1, 1 }); 
ListOfArrays.Add(new int[] { 2, 1 }); 
var chk = ListOfArrays.FindIndex(e => (e.SequenceEqual(new int[] { 2, 1 }))); 
Verwandte Themen