Ala*_*nay 3 arrays f# list sequence
在Python中,您可以创建数组,只需添加* n以使其重复多次.但我想知道在F#中执行此操作的最佳方法是什么,而不必使用长循环.为此使用数组,列表或序列也更好吗?我正在寻找类似下面的东西.
let array = [| 2; 3; 4; 5; 6; 7; 8; 9; 10; 10; 10; 10; 1 |] * 4 // for every suit
Run Code Online (Sandbox Code Playgroud)
最后是可以做一些像2 .. 10; 10; 10; 10; 1?谢谢.
[| 1; 2; 3 |] |> Array.replicate 4 |> Array.concat
// [|1; 2; 3; 1; 2; 3; 1; 2; 3|]
Run Code Online (Sandbox Code Playgroud)
您可以非常轻松地定义自己的python功能版本:
let duplicate times sequence =
seq {
for i = 1 to times do yield! sequence
}
Run Code Online (Sandbox Code Playgroud)
这适用于序列,但您可以使用内置转换函数将其应用于列表或数组:
[0; 1; 2; 3; 4; 5] |> duplicate 4 |> Seq.toList
Run Code Online (Sandbox Code Playgroud)
您甚至可以定义一个自定义运算符来专门处理数组:
let ( ** ) sequence times = duplicate times sequence |> Seq.toArray
Run Code Online (Sandbox Code Playgroud)
然后你将非常接近python语法:
[| 1; 2; 3 |] ** 4
Run Code Online (Sandbox Code Playgroud)
返回:
val it : int [] = [|1; 2; 3; 1; 2; 3; 1; 2; 3; 1; 2; 3|]
Run Code Online (Sandbox Code Playgroud)
编辑
使用Array.replicateTheQuickBrownFox在其答案中提到的内置功能,您可以使用以下行定义自定义运算符:
let ( ** ) sequence times = Array.replicate times sequence
Run Code Online (Sandbox Code Playgroud)