如何复制数组中不同次数的元素?

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中将concatcollect融合在一起:

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

以上是关于如何复制数组中不同次数的元素?的主要内容,如果未能解决你的问题,请参考以下文章

C语言 怎么计算数组中每一个不同元素出现的次数

如何计算numpy数组中字符串的出现次数? [复制]

如何计算指向不同向量数组中特定对象的指针的出现次数

在c#中找出一个数组中出现次数最多的元素,求各种方法,要详细的代码

复制数组任意次数(javascript)

Java。如何将一个LinkedList里的元素全部复制到另一LinkedList容器里?