arrays - 如何在不重复单词并遍历整个数组的情况下从数组中随机播放文本?(迅速)
问题描述
我正在尝试打乱我的数组并显示所有单词而不重复它们。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()
这将打印:
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”)
推荐阅读
- r - 删除图例“填充框”矩形
- python - Python:Pandas Dataframe 选择和乘法元素
- git - git checkout 注释标签行为
- c# - 单击共享的 OneNote 分区组链接时显示 OneDrive 目录列表
- docker - /usr/bin/ 是否被授权为 docker prefrences 中卷共享的默认位置?
- laravel - Laravel - 如何在 PHPUnit 测试中使用 faker?
- c++ - 超出列时,clang-format 强制每个参数/参数拥有自己的行?
- python - 使用 go-serial 从 arduino 的串口读取
- email - 从 Erlang 发送邮件 - OTP 应用程序或操作系统应用程序
- java - 查询C3P0开始获取的连接数