如何在不重复一个单词并遍历整个数组的情况下从数组中打乱文本?(斯威夫特)



我正在尝试打乱我的数组,并在不重复的情况下显示所有单词。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,水果:",名称:"奥兰治")

最新更新