首页 > 解决方案 > 如何在不重复单词并遍历整个数组的情况下从数组中随机播放文本?(迅速)

问题描述

我正在尝试打乱我的数组并显示所有单词而不重复它们。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
                }
            }
        }
    }

标签: arraysswiftloopsrandomshuffle

解决方案


如果我理解正确,您不应该在每次调用时都洗牌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()

这将打印:

Fruit(id: 5, fruit: "", name: "STRAWBERRY")
Fruit(id: 2, fruit: "", name: "APPLE")
Fruit(id: 4, fruit: "", name: "ORANGE" )
Fruit(id: 9, fruit: "", name: "CHERRY")
Fruit(id: 3, fruit: "", name: "PEAR")
Fruit(id: 6, fruit: "", name: "WATERMELON ")
Fruit(id: 8, fruit: "", name: "BANANA")
Fruit(id: 1, fruit: "", name: "KIWI")
Fruit(id: 7, fruit: "", name: " GRAPES")
果实末端
Fruit(id: 2, fruit: "", name: "APPLE")
Fruit(id: 3, fruit: "", name: "PEAR")
Fruit(id: 1, fruit: "" , 姓名:“KIWI”)
水果(id:4,水果:“”,名称:“ORANGE”)


推荐阅读