2012-07-02 2 views
5

Eventuali duplicati:
How can I convert a list<> to a multi-dimensional array?Conversione Lista <T> a Array (multidimensionale)

voglio avere una matrice in forma di double[,] per questo scopo dal momento che non so cosa sarà la lunghezza di questo array, voglio fare un prima poi usando List<T>.ToArray() convertendolo in double[,]:

public double[,] FilterClampedData(double[,] data) 
{ 
    var finalData = new List<double[]>(); 

    //Do some stuff on parameter 

    return finalData.ToArray(); ///Does not compile :(
} 
+3

Un 'Elenco ' può essere eventualmente convertito in un 'double [,]' se gli array sono tutti della stessa lunghezza. Potrebbe essere convertito in un 'double [] []' facilmente (questo è ciò che 'ToArray' restituisce). Se questo non ti è chiaro, confronta http://msdn.microsoft.com/en-us/library/2yd9wwz4 e http://msdn.microsoft.com/en-us/library/2s05feca –

+0

La firma del metodo indica un array bidimensionale bidimensionale come ritorno, mentre si restituisce un array monodimensionale. In effetti, stai restituendo una matrice di array. –

+0

e se il tuo valore di ritorno è 'double [] []' – Jodrell

risposta

5

Dal ToArray restituisce un array monodimensionale, non c'è da stupirsi perché questo fa non compilare. Se dovessi restituire double[][], si compilerebbe comunque. Si potrebbe anche costruire l'array 2-D manualmente con due cicli annidati:

var R = finalData.Count; 
var C = finalData[0].Length; 
var res = new double[R, C]; 
for (int r = 0 ; r != R ; r++) 
    for (int c = 0 ; c != C ; c++) 
     res[r, c] = finalData[r][c]; 
return res; 

Il codice di cui sopra si presuppone che almeno un elemento nella finalData, e che la lunghezza delle liste all'interno finalData è lo stesso.

+0

intendi 'finalData.Count'? Non riesco a trovare. Proprietà lunghezza –

+0

@ Sean87 Assolutamente, hai ragione, è 'Count', non' Length'. – dasblinkenlight

+0

Suppongo che l'OP sappia già 'C' a meno che il risultato non sia frastagliato. – Jodrell

1

finalData.ToArray() produrranno double[][] perché:

  • List<T>.ToArray() rendimenti T[]
  • List<T[].ToArray() rendimenti T[][]
+0

Non è contraddittorio con la frase esattamente opposta qui [prima riga] - http://stackoverflow.com/a/11295805/763026 ? –

+0

@AngshumanAgarwal: "Poiché ToArray restituisce un array monodimensionale" - sì, è corretto ed è uguale alla mia dichiarazione. Elenco .ToArray() restituisce T []. Elenco .ToArray() restituisce T [] []. – abatishchev

1
  1. un'istanza di un nuovo doppio array con la dimensione più grande [lunghezza della lista, la più grande serie lunghezza nell'elenco]
  2. Passeggiata attraverso la lista con il doppio per il ciclo (il primo della lista, il nidificato sulla voce elenco corrente) e riempire il nuovo array