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

Posted

技术标签:

【中文标题】如何在不重复单词并遍历整个数组的情况下从数组中随机播放文本? (迅速)【英文标题】:How to shuffle text from array without repeating a word and going through the whole array? (Swift) 【发布时间】:2021-01-31 12:16:57 【问题描述】:

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

【问题讨论】:

抱歉,我不确定您的实际目标是什么。能详细点吗? 我希望能够随机播放项目并显示 1 并遍历数组。 示例 - 当数字 5 显示为已洗牌的项目时,它会遍历所有 9 个项目然后停止。目前它会重复单词并且不会遍历所有单词。 所以只需洗牌一次,从 startIndex 开始,然后在调用 nextFruit 时增加索引。只有当索引为 0 时,您才能对其进行随机播放 【参考方案1】:

如果我理解正确的话,您不应该在每次致电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()

这将打印:

水果(id:5,水果:“?”,名称:“STRAWBERRY”) 水果(id:2,水果:“?”,名称:“APPLE”) 水果(id:4,水果:“?”,名称:“ORANGE”) 水果(id:9,水果:“?”,名称:“CHERRY”) 水果(id:3,水果:“?”,名称:“梨”) 水果(id:6,水果:“?”,名称:“WATERMELON”) 水果(id:8,水果:“?”,名称:“BANANA”) 水果(id:1,水果:“?”,名称:“KIWI”) 水果(id:7,水果:“?”,名称:“GRAPES”) 水果结束 水果(id:2,水果:“?”,名称:“APPLE”) 水果(id:3,水果:“?”,名称:“梨”) 水果(id:1,水果:“?”,名称:“KIWI”) Fruit(id: 4, fruit: "?", name: "ORANGE")

【讨论】:

以上是关于如何在不重复单词并遍历整个数组的情况下从数组中随机播放文本? (迅速)的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用 for 循环的情况下从 appsettings 文件中读取对象数组中特定键的值

如何在没有任何循环php的情况下从数组中随机获取项目

在不知道对象索引的情况下从数组中删除对象?

如何在不清除整个队列的情况下从 Resque 队列中删除特定作业?

从Ruby中的数组中删除重复元素

如何在不启动容器的情况下从 dockerfile 创建图像 [重复]