Arrays 如何从数组中获取一个随机元素,而不必多次获取同一元素?

Arrays 如何从数组中获取一个随机元素,而不必多次获取同一元素?,arrays,uitableview,swift,random,arc4random,Arrays,Uitableview,Swift,Random,Arc4random,当我使用arc4random_统一方法从数组中抓取一个元素时,数组中的同一元素通常会被多次抓取。我试图使数组中的每个元素只被抓取一次。我尝试这样做的原因是UITableView中的多个单元格没有相同的文本。以下是UITableView中单元格文本的数组: 在我的viewDidLoad方法中,我这样做是为了调用定义的随机元素: 如何更改代码,使两个元素不会在UITableView中显示两次?谢谢大家! 保留一个随机索引值列表,如果该列表中有后续的随机索引,则跳过该列表并生成另一个随机索引 你想对数

当我使用arc4random_统一方法从数组中抓取一个元素时,数组中的同一元素通常会被多次抓取。我试图使数组中的每个元素只被抓取一次。我尝试这样做的原因是UITableView中的多个单元格没有相同的文本。以下是UITableView中单元格文本的数组:

在我的viewDidLoad方法中,我这样做是为了调用定义的随机元素:


如何更改代码,使两个元素不会在UITableView中显示两次?谢谢大家!

保留一个随机索引值列表,如果该列表中有后续的随机索引,则跳过该列表并生成另一个随机索引

你想对数组进行随机排序吗?你要找的是随机洗牌或随机排列。这是一种可能的实现方式。这不是最好的实现方式,如果你想得到所有的元素,到最后会变得非常低效。同意。另一种方法是使用包含n个元素的链表。生成一个随机索引i,1更好的替代方法是对值集进行无序排列,并在无序排列的集合中迭代以获得整个集合,或者如果需要子集,则使用。
var definitions = ["Used to carry the pharoah","Used to carry bodies as a ceremony","Had a flat deck to carry a farmer's treasure","Daily, it made a trip around the world to carry Ra","Towed by smaller boats, carrying heavy objects","Used for business and pleasure by officials/nobles","Carried most Egyptians and some goods"]
self.boats = [Boats(name: definitions[Int(arc4random_uniform(7))]),Boats(name: definitions[Int(arc4random_uniform(7))]),Boats(name: definitions[Int(arc4random_uniform(7))]),Boats(name: definitions[Int(arc4random_uniform(7))]),Boats(name: definitions[Int(arc4random_uniform(7))]),Boats(name: definitions[Int(arc4random_uniform(7))]),Boats(name: definitions[Int(arc4random_uniform(7))])]