,array.append可以連接兩個數組;有沒有辦法將2個array2D對象追加到一個或按列連接幾個1-D數組到一個array2D對象?F#如何在F#中追加/連接array2D並組合一維數組到array2D
回答
的array2D function會變成任何seq<#seq<'T>>
成一個'T [,]
所以它應該工作車削一堆一維數組爲二維數組。
let arr1 = [| 1; 2; 3 |]
let arr2 = [| 4; 5; 6 |]
let combined = array2D [| arr1; arr2 |]
我不認爲有任何內置來處理這個問題。不過,您可以根據Array2D.init
或Array2D.blit
來定義自己的可重用方法。如果您需要將多個列合併爲一個邏輯整體,我認爲使用數組而不是二維數組通常會更方便(並且通常,.NET中的1D數組操作要比多維數組快得多,二維陣列操作)。
據我所看到的,有沒有F#庫函數會變成幾個一維數組到一個單一的二維數組,但可以使用Array2D.init
編寫自己的功能:
let joinInto2D (arrays:_[][]) =
Array2D.init arrays.Length (arrays.[0].Length) (fun i j ->
arrays.[i].[j])
它帶有一個數組所以當你調用它時,你會給它一個包含你想要加入的所有數組的數組(例如[| arr1; arr2 |]
來加入兩個數組)。該函數將多個一維數組連接成一個單一的二維數組,每個輸入數組包含一行。它假定所有給定數組的長度是相同的(最好添加一個檢查來驗證,例如使用Array.forall
)。 init
函數創建一個指定尺寸的數組,然後調用我們的lambda函數爲每個元素計算一個值 - 在lambda函數中,我們使用該行作爲數組數組中的索引,並將該列作爲個人的索引陣列。
這裏是展示如何使用該功能的例子:
> let arr1 = [| 1; 2; 3 |]
let arr2 = [| 4; 5; 6 |];;
> joinInto2D [| arr1; arr2 |];;
val it : int [,] = [[1; 2; 3]
[4; 5; 6]]
編輯:已經有一個函數來做到這一點 - 真好!如果你想加入一維數組作爲列而不是行(,這是array2D
實施的行爲,我會離開這裏的答案,因爲它可能仍然是有用的,例如,
感謝湯姆,是我一直想要以列的形式連接數組。 – ahala 2010-03-03 02:12:14
- 1. F#中有List2D像Array2D
- 2. Array2D到陣列
- 3. 將Array2d填充到ListView中
- 4. 在f中合併多個數組
- 5. F#創建二維數組
- 6. 如何在F#中創建一個一維,非零基數組#
- 7. 將多維數組一起追加到一維數組中?
- 8. 如何將Array2D轉換與選擇INT元素與詮釋元素Array2D
- 9. f:參數複合組件
- 10. 在f#中將相同長度的數組組合到一個2d數組中#
- 11. 如何在F中組合狀態單元和連續單元#
- 12. 如何將數組合併到一個多維數組中?
- 13. 將數組追加到多維數組
- 14. 如何合併一維數組和二維數組在php
- 15. F#:在F#換單元素數組
- 16. 將多維數組合併到另一個多維數組中
- 17. 如何將二維數組傳遞給F#中的函數?
- 18. F#在數組中選擇一個值
- 19. 將二維數組合併到組中
- 20. 如何合併多維數組到單維數組?
- 21. F#解析器組合器
- 22. F#排序元組數組
- 23. 在F#中組合代理和任務#
- 24. 將x和y數組的所有組合加入到函數f(x,y)中
- 25. numpy連接不會將新數組追加到空多維數組
- 26. array2D中的交換元素java
- 27. F# - 如何從數組中填充System.Collections.Generic.List
- 28. 如何在swift中將元素追加到二維數組中?
- 29. F中的數組遍歷#
- 30. 省略在F#數組
感謝。這是非常有幫助的。我還以爲數組的數組是一樣的array2D在F#中。 – ahala 2010-03-03 02:19:51