如何創建一個函式,該函式將在不使用遞回的情況下轉置串列?
這是我到目前為止得到的:
let lst = [[1;2;3];[4;5;6];[7;8;9]]
let transpLstLst (lst: 'a list list) -> 'a list list =
List.map List.head lst :: []
回傳:
[[1;4;7]]
這是我想要的很長的輸出行,但是我如何從那里轉到能夠獲得此輸出:
[[1;4;7];[2;5;8];[3;6;9]]
uj5u.com熱心網友回復:
這是非常低效的*,但它滿足您的要求:
let transpose (matrix : List<List<_>>) =
[
if matrix.Length > 0 then
assert(matrix |> List.distinctBy List.length |> List.length = 1)
for i = 0 to matrix.[0].Length - 1 do
yield [
for list in matrix do
yield list.[i]
]
]
例子:
let matrix = [[1; 2; 3]; [4; 5; 6]; [7; 8; 9]; [10; 11; 12]]
transpose matrix |> printfn "%A" // [[1; 4; 7; 10]; [2; 5; 8; 11]; [3; 6; 9; 12]]
* O(n 3 ) 其中 n 是方陣的長度。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/335669.html
