2009-11-23 3 views
13

Je suis en train de créer une matrice de doubles, ce qui représente une corrélation entre les entités.Générer un tableau à deux dimensions via LINQ

Voici comment je le fais via LINQ

double[][] correlationsRaw = (from e in entitiesInOrder 
           select 
           (from f in entitiesInOrder 
            select correlations.GetCorrelation(e, f) 
           ).ToArray()).ToArray(); 

Cela fonctionne très bien.

Mais ce que je veux est un tableau à deux dimensions ( doubles [,]), pas un tableau en dents de scie.

Évidemment, je peux écrire un imbriqué pour boucle pour convertir l'un dans l'autre.

Mais est-il une astuce élégante LINQ je peux utiliser ici?

Répondre

14

Je ne pense pas qu'il y ait un moyen facile de retourner directement un tableau multidimensionnel d'une requête Linq ... mais vous pouvez créer une fonction qui prend un tableau en dents de scie et retourne un tableau multidimensionnel:

public T[,] JaggedToMultidimensional<T>(T[][] jaggedArray) 
{ 
    int rows = jaggedArray.Length; 
    int cols = jaggedArray.Max(subArray => subArray.Length); 
    T[,] array = new T[rows, cols]; 
    for(int i = 0; i < rows; i++) 
    { 
     cols = jaggedArray[i].Length; 
     for(int j = 0; j < cols; j++) 
     { 
      array[i, j] = jaggedArray[i][j]; 
     } 
    } 
    return array; 
} 

d'ailleurs, il pourrait être une méthode d'extension, vous permettant de l'utiliser dans une requête Linq ...

+1

@StuartLC ou simplement utiliser 'for (int j = 0; j

Questions connexes