2009-11-23 42 views
13

Tôi đang cố gắng tạo ma trận tăng gấp đôi, biểu diễn mối tương quan giữa các thực thể.Tạo mảng hai chiều qua LINQ

Đây là cách tôi đang làm nó thông qua LINQ

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

đó làm việc tốt.

Nhưng những gì tôi muốn là mảng hai chiều ( double [,]), không phải là mảng bị lởm chởm.

Rõ ràng, tôi có thể viết một số lồng nhau cho vòng lặp để chuyển đổi cái kia.

Nhưng có một số mẹo LINQ thanh lịch mà tôi có thể sử dụng tại đây không?

Trả lời

14

Tôi không nghĩ rằng có một cách dễ dàng trực tiếp trả lại một mảng đa chiều từ một truy vấn LINQ ... tuy nhiên bạn có thể tạo ra một chức năng mà phải mất một mảng lởm chởm và trả về một mảng đa chiều:

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

Nhân tiện, nó có thể là một phương pháp mở rộng, cho phép bạn sử dụng nó trong truy vấn LINQ ...

+1

@StuartLC hoặc chỉ sử dụng 'cho (int j = 0; j

Các vấn đề liên quan