2010-03-02 53 views

Trả lời

6

Các array2D function sẽ biến bất kỳ seq<#seq<'T>> vào một 'T [,] vì vậy nó phải làm việc cho biến một loạt các mảng 1D thành một mảng 2D.

let arr1 = [| 1; 2; 3 |] 
let arr2 = [| 4; 5; 6 |] 

let combined = array2D [| arr1; arr2 |] 
0

Tôi không nghĩ có bất kỳ thứ gì được tích hợp sẵn để xử lý việc này. Tuy nhiên, bạn có thể xác định phương pháp có thể sử dụng lại của riêng mình dựa trên Array2D.init hoặc Array2D.blit. Nếu bạn cần kết hợp nhiều cột vào một tổng hợp lôgíc, tôi nghĩ sẽ thường thuận tiện hơn khi sử dụng mảng mảng chứ không phải mảng 2D (và nói chung, hoạt động mảng 1D trong .NET nhanh hơn đáng kể so với đa số) hoạt động mảng chiều).

+0

nhờ. này là rất hữu ích. tôi đã nghĩ mảng của mảng là giống như array2D trong F #. – ahala

3

Theo như tôi có thể nhìn thấy, không có F # thư viện chức năng đó sẽ lần lượt nhiều mảng 1D thành một mảng 2D duy nhất, nhưng bạn có thể viết chức năng của riêng bạn sử dụng Array2D.init:

let joinInto2D (arrays:_[][]) = 
    Array2D.init arrays.Length (arrays.[0].Length) (fun i j -> 
    arrays.[i].[j]) 

Phải mất một mảng của mảng, vì vậy khi bạn gọi nó, bạn sẽ cung cấp cho nó một mảng chứa tất cả các mảng mà bạn muốn tham gia (ví dụ: [| arr1; arr2 |] để nối hai mảng). Hàm ghép nối nhiều mảng 1D thành một mảng 2D chứa một hàng cho mỗi mảng đầu vào. Nó giả định rằng độ dài của tất cả các mảng đã cho giống nhau (có thể là một ý tưởng tốt để thêm một kiểm tra để xác minh rằng, ví dụ sử dụng Array.forall). Hàm init tạo một mảng các thứ nguyên được chỉ định và sau đó gọi hàm lambda của chúng tôi để tính giá trị cho mỗi phần tử - trong hàm lambda, chúng tôi sử dụng hàng làm chỉ mục trong mảng mảng và cột làm chỉ mục cho từng cá nhân mảng.

Dưới đây là một ví dụ cho thấy làm thế nào để sử dụng chức năng:

> let arr1 = [| 1; 2; 3 |] 
    let arr2 = [| 4; 5; 6 |];; 

> joinInto2D [| arr1; arr2 |];; 
val it : int [,] = [[1; 2; 3] 
        [4; 5; 6]] 

EDIT: Đã có một chức năng để làm điều đó - tốt đẹp! Tôi sẽ để lại câu trả lời ở đây, bởi vì nó vẫn có thể hữu ích, ví dụ nếu bạn muốn tham gia mảng 1D như cột (thay vì hàng, đó là hành vi thực hiện bởi array2D.

+0

nhờ Tom, vâng Tôi luôn muốn tham gia mảng dưới dạng cột. – ahala

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