我有一个字符串数组。而且我还有随机从中选择一个字符串的变量。问题是 - 它可以重复价值而我不想要那样。每个值只应显示一次。那我该怎么做?我知道在这种情况下集合比数组更合适,但对我来说它更复杂
var questions = ["red", "blue", "green", "square", "tasty"]
let randomFact = Int(arc4random_uniform(UInt32(questions.count)))
出于我的应用的目的,它应该在触摸按钮时显示新值。我试图从数组中删除值以避免它重复
questions.removeAtIndex(Int(questions[randomFact])!)
但它崩溃了。
那么如何随机显示每个值但只显示一次?
答案 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)
但请记住,如果您某种方式依赖于代码中数组的初始大小,则会导致您的应用崩溃。