如何在不重复单词和遍历整个数组的情况下从数组中重新排列文本? 迅速

问题描述

我正在尝试改组数组并显示所有单词而不重复它们。 iv试了一会儿。我以为我可以使用该枚举,但是它不能正常工作,不确定为什么...有任何想法吗?

我的阵列

    var fruitOptions = [
        
        Fruit(id: 1,fruit:"?",name: "KIWI"),Fruit(id: 2,name: "APPLE"),Fruit(id: 3,name: "PEAR"),Fruit(id: 4,name: "ORANGE"),Fruit(id: 5,name: "STRAWBerry"),Fruit(id: 6,name: "WATERMELON"),Fruit(id: 7,name: "GRAPES"),Fruit(id: 8,name: "BANANA"),Fruit(id: 9,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时都洗牌。只需迭代一次,然后再遍历您的收藏集即可。我认为最简单的解决方案是存储当前水果的索引。在您的下一个水果方法中,检查索引是否等于零,如果为true,则将您的水果随机播放。在当前索引处获取水果并将其增加。如果索引等于水果数,则将其重置为零。像这样:

struct Fruit {
    let id: Int
    let fruit: Character
    let name: String
}

游乐场测试:

var fruitOptions = [
    Fruit(id: 1,fruit:"?",name: "KIWI"),Fruit(id: 2,name: "APPLE"),Fruit(id: 3,name: "PEAR"),Fruit(id: 4,name: "ORANGE"),Fruit(id: 5,name: "STRAWBERRY"),Fruit(id: 6,name: "WATERMELON"),Fruit(id: 7,name: "GRAPES"),Fruit(id: 8,name: "BANANA"),Fruit(id: 9,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()

这将打印:

水果(id:5,水果:“?”,名称:“草莓”)
水果(编号:2,水果:“?”,名称:“ APPLE”)
水果(编号:4,水果:“?”,名称:“ ORANGE”)
水果(编号:9,水果:“?”,名称:“樱桃”)
水果(id:3,水果:“?”,名称:“ PEAR”)
水果(编号:6,水果:“?”,名称:“ WATERMELON”)
水果(编号:8,水果:“?”,名称:“ BANANA”)
水果(编号:1,水果:“?”,名称:“ KIWI”)
水果(编号:7,水果:“?”,名称:“ GRAPES”)
水果末
水果(编号:2,水果:“?”,名称:“ APPLE”)
水果(id:3,水果:“?”,名称:“ PEAR”)
水果(编号:1,水果:“?”,名称:“ KIWI”)
水果(id:4,水果:“?”,名称:“ ORANGE”)