我目前正在尝试为iOS做一个应用程序,但我无法得到一些简单的代码下来。基本上我需要随机选择5个元素从数组列表中没有重复的元素。我有一个粗略的草案,但它只显示一个元素。
下面是我的代码:
let array1 = ["salmon", "turkey", "salad", "curry", "sushi", "pizza"]
let randomIndex1 = Int(arc4random_uniform(UInt32(array1.count)))
print(array1[randomIndex1])
6条答案
按热度按时间k7fdbhmy1#
您可以这样做:
set
只能包含唯一的元素,因此不能多次包含相同的元素。我创建了一个空的
set
,然后只要数组包含的元素少于5个(您选择的数字),我就进行迭代并向set
添加一个随机元素。在最后一步中,我们需要将集合转换为数组,以获得所需的数组。
u3r8eeie2#
SWIFT 5.1版
这个问题已经得到了回答,但我敢提出一个更简单的解决办法。
如果你把你的数组转换成一个集合,你会得到一个没有特定顺序的唯一项的数组。如果你从这个数组中取5个元素,你会得到同样的结果。
但它只是2行;)
示例:
示例打印:
唯一的要求是你的对象必须符合Hashable协议,这是大多数标准Swift类型所做的,否则让你自己的类型符合协议通常很简单。
https://developer.apple.com/documentation/swift/hashable
brqmpdu13#
如果你不想改变原来的数组,下面的代码会把选中的元素放在数组的末尾,然后把数组的最后一部分作为切片返回。如果你不想改变原来的数组,这是很有用的,优点是它不占用额外的内存,而且你可以在同一个数组上多次调用它。
示例:
ctzwtxfj4#
我的2:Moe Abdul-Hameed的解在理论上有一个缺点:如果你在每次迭代中滚动相同的
randomIndex
,while
循环将永远不会退出。另一种方法是创建原始数组的可变副本,然后排除拾取的项目:
rm5edbpk5#
通过从数组中删除您选取的值,防止重复的值被选取
yacmzcpb6#
swift-algorithms现在包含
Sequence
的扩展名randomSample
。