2009-03-13 46 views
14

Phương pháp selectMany.ToArray() là gì? Nó có phải là một phương pháp được xây dựng trong C#?Chuyển đổi mảng 2 chiều

Tôi cần chuyển đổi mảng hai chiều thành mảng một chiều.

Trả lời

21

SelectMany là toán tử chiếu, một phương thức mở rộng được cung cấp bởi không gian tên System.Linq.

Nó thực hiện chiếu từ một đến nhiều phần tử qua một chuỗi, cho phép bạn "làm phẳng" chuỗi kết quả thành một chuỗi.

Bạn có thể sử dụng nó theo cách này:

int[][] twoDimensional = new int[][] { 
             new int[] {1, 2}, 
             new int[] {3, 4}, 
             new int[] {5, 6} 
            }; 

int [] flattened = twoDimensional.SelectMany(x=>x).ToArray(); 
+9

điểm thông thái rởm; đó không phải là những gì tôi muốn gọi là mảng 2 chiều - nó là một mảng lởm chởm ... –

+0

@MarcGravell Đó không phải là một mảng lởm chởm 2D? Rõ ràng một mảng răng cưa không phải là một mảng hình chữ nhật hoặc mảng "khối lập phương". Nhưng nó vẫn có một mức độ kích thước. Để nói mảng 2D không chỉ rõ răng cưa hoặc hình học/thẳng. – barlop

+0

@barlop có lẽ, nhưng cuối cùng "mảng" ở đây sẽ đề cập đến mảng bên ngoài, đó là một vectơ tham chiếu; sự lố bịch thực sự làm cho nó rõ ràng rằng nó phức tạp hơn, và tôi sẽ đồng ý rằng trong một số cách "2D" có thể được sử dụng, trái với, nói, một 'int [] [] []'. Cuối cùng, đặt tên là khó :) –

41

Nếu bạn có nghĩa là một mảng lởm chởm (T[][]), SelectMany là bạn của bạn. Tuy nhiên, nếu bạn có ý nghĩa một mảng hình chữ nhật (T[,]), sau đó bạn chỉ có thể liệt kê các dữ liệu ngày qua foreach - hoặc:

int[,] from = new int[,] {{1,2},{3,4},{5,6}}; 
    int[] to = from.Cast<int>().ToArray(); 
+0

Chủ đề này, http://stackoverflow.com/questions/5132397/fast-way-to-convert-a-two-dimensional-array-to-a-list-one-dimensional, đi vào chi tiết về cách thực hiện phương pháp foreach và một số chỉ số hiệu suất. – ShawnFeatherly

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