生成随机索引到数组的最佳方法?

时间:2018-11-09 18:59:03

标签: functional-programming f# fscheck

下午好。我有一组要从中绘制随机子集的值。

我的第一个想法是:

child()

但是,r.GetValues(0,size)可能会多次生成相同的值。如何获得独特的价值?我的第一个想法是将索引重复存储到集合中,直到集合拥有所需数量的元素?但这似乎在程序上/功能上不够吗?有更好的方法吗?

还是我应该从[0..size-1]开始并从中删除随机元素,直到它拥有所需的数字索引?

我并不是真正在寻找最有效的方法,而是最实用的方法。我正在努力更好地掌握功能性思维定势。

1 个答案:

答案 0 :(得分:3)

如果您对所有索引的列表进行随机排序,则只需获取列表中前count个元素。

let getRandomIndices size count =
  if size >= count then
    let r = System.Random()
    [0..size-1] |> List.sortBy (fun _ -> r.Next()) |> List.take count
  else
    [0..size-1]