如何只访问一次数组的每个值

时间:2015-11-10 08:17:54

标签: arrays swift2

我有一个字符串数组。而且我还有随机从中选择一个字符串的变量。问题是 - 它可以重复价值而我不想要那样。每个值只应显示一次。那我该怎么做?我知道在这种情况下集合比数组更合适,但对我来说它更复杂

var questions = ["red", "blue", "green", "square", "tasty"]

let randomFact = Int(arc4random_uniform(UInt32(questions.count)))    

出于我的应用的目的,它应该在触摸按钮时显示新值。我试图从数组中删除值以避免它重复

questions.removeAtIndex(Int(questions[randomFact])!)

但它崩溃了。

那么如何随机显示每个值但只显示一次?

2 个答案:

答案 0 :(得分:1)

我喜欢你选择之后移除元素的方法。您的代码只是一个小问题:

let fact = questions[randomFact]
questions.removeAtIndex(randomFact)

答案 1 :(得分:1)

如果在迭代数组长度时执行元素删除,这可能会导致应用程序崩溃(除非您使用安全删除循环)。

有关删除安全迭代的详细信息,请参阅this SO question

编辑01:循环解决方案

以下代码对我有用,它能完成你想要的吗?

var questions = ["red", "blue", "green", "square", "tasty"]

repeat
{
   let randomFact = Int(arc4random_uniform(UInt32(questions.count)))
   print( questions[randomFact] )
   questions.removeAtIndex(randomFact)
}while( questions.count > 0 );

这是输出:

square
tasty
green
red
blue

编辑02:一般解决方案

通常,您可以从数组中删除元素,如下所示:

let randomFact = Int(arc4random_uniform(UInt32(questions.count)))
questions.removeAtIndex(randomFact)

但请记住,如果您某种方式依赖于代码中数组的初始大小,则会导致您的应用崩溃。