在F#中在数组中创建重复序列的最佳方法是什么?

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?谢谢.

The*_*Fox 8

[| 1; 2; 3 |] |> Array.replicate 4 |> Array.concat

// [|1; 2; 3; 1; 2; 3; 1; 2; 3|]
Run Code Online (Sandbox Code Playgroud)


Aar*_*ach 6

您可以非常轻松地定义自己的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)