2015-10-31 5 views
6

Se si ha un elenco di array come:Trova indice di un array in lista di array in C#

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

Come ti trovare l'indice di {2, 1} nella lista?

Non voglio utilizzare un ciclo di iterazione. Vorrei un metodo conciso come quello suggerito da Parimal Raj in Check if string array exists in list of string:

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

(il codice qui sopra restituirà true se esistono membri di una data matrice di stringhe in un elenco di array di stringhe)

+1

L'unico modo per evitare un ciclo di iterazione sarà un dizionario, rispettivamente, un hash-lookup-table. – xXliolauXx

+0

@xXliolauXx Per iterazione penso che indichi LINQ invece di un ciclo scritto a mano. –

+0

L'ordine della matrice interna è importante? –

risposta

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

Puoi accorciare un po ': 'ListOfArrays.FindIndex (l => l.SequenceEqual (myArr));' –

+2

'ListOfArrays.FindIndex (myArr.SequenceEqual);' dovrebbe anche lavoro – soon

1

si può provare questo:

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