我基本上在按钮内创建了一个单词数组,每次按下按钮时,都会从该数组中获得一个随机项。现在有时候我得到相同的物品。如果我不希望自己的商品重复出现并且总是想获得新商品怎么办? (很明显,我什至希望他们在本全部显示一次之后重复他们的循环)。
@IBOutlet weak var shoppingLabel : UILabel!
@IBAction func shoppingListButton(_ sender: Any) {
var shoppingList = ["Oranges","Apples","Broccoli"].shuffled()
print(shoppingList)
resultLabel.text = shoppingList.first ?? ""
}
这不是重复的,因为类似的问题在按钮外有一个数组,并且是一个var数组,我的是让。对于我的数组,我无法从中删除项目,因为它无法更改,不,我无法将其设为var数组...
答案 0 :(得分:1)
要遍历随机数组:
要实现1)和2),只需将数组定义为常量,然后将其改组为您要使用的方法之外。
要实现3)创建一个附加变量,以跟踪您当前所在的数组的索引,并在选择一个值后对其进行递增。
为确保不超出数组的范围并实现数组的“循环”,请在索引大于数组的最后一个索引时将索引重置为0。一种简单的方法是在Swift中使用余数运算符%。
例如
let shoppingList = ["Oranges", "Apples", "Broccoli"].shuffled()
var currentIndex = 0
@IBAction func shoppingListButton(_ sender: Any) {
// pick an item
let nextItem = shoppingList[currentIndex]
// update the label
resultLabel.text = nextItem
// increment the index to cycle through items
currentIndex = (currentIndex + 1) % shoppingList.count
}
要从数组中选择随机的非重复值:
要实现2),请使用randomElement()函数选择一个随机元素。这比在整个数组中进行混洗并每次都选择第一个元素要便宜。
要实现3),请使用while循环或类似方法继续选择随机元素,直到生成新元素为止。
例如
let shoppingList = ["Oranges", "Apples", "Broccoli"]
@IBAction func shoppingListButton(_ sender: Any) {
// pick a random element that is not equal to the last one
var nextItem: String?
repeat {
nextItem = shoppingList.randomElement()
} while nextItem == resultLabel.text
// update the label
resultLabel.text = nextItem
}