如何复制数组中不同次数的元素?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何复制数组中不同次数的元素?相关的知识,希望对你有一定的参考价值。
[如果我有一个由元素[5;10;15]
组成的列表,如何获得输出列表,其中输入列表中元素x的重复次数x/5
次,或者使用任何其他整数表达式指定数字重复?
因此类似于此列表,它应该返回输出数组[5; 10; 10; 15; 15; 15]
答案
首先,将输入列表中的每个元素转换为包含这么多元素的列表。要转换列表的每个元素,请使用List.map
。要创建具有给定数量的元素的列表,请使用List.replicate
:
let f lst =
lst
|> List.map (fun x -> List.replicate (x/5) x)
让我们测试一下:
> f [5; 10]
[ [5]; [10; 10] ]
然后,剩下要做的就是使用List.concat
将所有这些列表连接成一个大列表:
let f lst =
lst
|> List.map (fun x -> List.replicate (x/5) x)
|> List.concat
或者您可以在map
中将concat
和collect
融合在一起:
let f lst =
lst
|> List.collect (fun x -> List.replicate (x/5) x)
另一答案
您可以定义以下函数,使用带有嵌套sequence expression循环的for
返回序列:
let repeatedSeq (s, itemCount) =
seq { for item in s do for i in 1..itemCount(item) -> item }
然后执行:
let list = [5; 10; 15]
let repeatedList = repeatedSeq(list, fun i -> i/5) |> Seq.toList
根据需要得到[5; 10; 10; 15; 15; 15]
。这种方法避免将任何中间序列具体化为列表或数组。
如果要使最终结果成为数组,请改为执行|> Seq.toArray
。
演示小提琴here。
以上是关于如何复制数组中不同次数的元素?的主要内容,如果未能解决你的问题,请参考以下文章