2015-10-31 19 views
6

Jeśli miał listę tablic, takich jak:Znajdź indeks tablicy w Lista tablic w C#

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

Jak znaleźć indeks {2, 1} w liście?

Nie chcę używać pętli iteracji. Chciałbym zwięzły sposób, jak ten sugerowany przez Parimal Raj w Check if string array exists in list of string:

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

(powyższy kod zwróci true jeśli członkowie danej tablicy ciągów istnieje na liście tablic string)

+1

Jedynym sposobem, aby uniknąć pętli iteracja będzie słownikiem odpowiednio hash-lookup-table. – xXliolauXx

+0

@xXliolauXx Przez iterację Myślę, że on znaczy LINQ zamiast ręcznie pisanej pętli. –

+0

Czy kolejność macierzy wewnętrznej ma znaczenie? –

Odpowiedz

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

Możesz go nieco skrócić: 'ListOfArrays.FindIndex (l => l.SequenceEqual (myArr));' –

+2

'ListOfArrays.FindIndex (myArr.SequenceEqual); praca – soon

1

Można spróbować to:

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 })));