我正在尝试打乱我的数组,并在不重复的情况下显示所有单词。Iv试了一会儿,然后绕了一圈。我以为我可以使用枚举,但它不完全有效,不确定为什么。。。有什么想法吗?
我的阵列
var fruitOptions = [
Fruit(id: 1, fruit:" ", name: "KIWI"),
Fruit(id: 2, fruit:" ", name: "APPLE"),
Fruit(id: 3, fruit:" ", name: "PEAR"),
Fruit(id: 4, fruit:" ", name: "ORANGE"),
Fruit(id: 5, fruit:" ", name: "STRAWBERRY"),
Fruit(id: 6, fruit:" ", name: "WATERMELON"),
Fruit(id: 7, fruit:" ", name: "GRAPES"),
Fruit(id: 8, fruit:" ", name: "BANANA"),
Fruit(id: 9, fruit:" ", name: "CHERRY")
]
洗牌并显示下一个水果的功能。
mutating func nextFruit() {
fruitOptions.shuffle()
while fruitOptions.count <= 8 {
if fruitNumber + 1 < fruitOptions.count {
// if !fruitOptions.contains(fruitOptions.capacity) {
fruitNumber += 1
//
// for (index, fruitOptions) in fruitOptions.enumerated() {
// if case fruitOptions.id = index + 0 {
// fruitNumber += 1
} else {
// fruitNumber = 0 // <- Makes a never ending app.!? :/
score = 0
}
}
}
}
如果我理解正确的话,您不应该每次调用nextFruit
时都打乱您的集合。在迭代您的集合之前,只需对其进行一次洗牌。在我看来,最简单的解决方案是存储当前水果的索引。在你的下一个水果方法中,检查指数是否等于零,如果是真的,洗牌你的水果。获取当前索引的水果并递增。如果索引等于水果数量,则将其重置为零。类似于:
struct Fruit {
let id: Int
let fruit: Character
let name: String
}
游乐场测试:
var fruitOptions = [
Fruit(id: 1, fruit:" ", name: "KIWI"),
Fruit(id: 2, fruit:" ", name: "APPLE"),
Fruit(id: 3, fruit:" ", name: "PEAR"),
Fruit(id: 4, fruit:" ", name: "ORANGE"),
Fruit(id: 5, fruit:" ", name: "STRAWBERRY"),
Fruit(id: 6, fruit:" ", name: "WATERMELON"),
Fruit(id: 7, fruit:" ", name: "GRAPES"),
Fruit(id: 8, fruit:" ", name: "BANANA"),
Fruit(id: 9, fruit:" ", name: "CHERRY")]
var index = 0
func nextFruit() {
if index == 0 { fruitOptions.shuffle() }
print(fruitOptions[index])
index += 1
if index == fruitOptions.count {
print("end of fruits")
index = 0
}
}
nextFruit()
nextFruit()
nextFruit()
nextFruit()
nextFruit()
nextFruit()
nextFruit()
nextFruit()
nextFruit()
nextFruit()
nextFruit()
nextFruit()
nextFruit()
这将打印:
水果水果:",名称:"PEAR")
水果(id:6,果实:",名称:"WATERMELON";",名称:"APPLE")
水果(id:3,水果:"名称:"PEAR")
水果(id:1,水果:",名称:"KIWI")
水果(id:4,水果:",名称:"奥兰治")