我正在尝试为我的朋友制作一个应用程序,我随机决定我们的幻想体育草案。现在使用我的应用程序,单击该按钮时,将选择阵列中的随机名称并显示在屏幕上。但是,当显示名称时,我希望将其删除,以便它不会再出现。 函数是我尝试此操作的最新尝试,但它给了我一个错误。有谁知道如何做到这一点?这是我目前使用的代码。
removeName
答案 0 :(得分:3)
存储两个数组。当从阵列1中随机选择名称时,将从阵列1移动到阵列2.当阵列1为空时,交换两个阵列。 (这就是我们游戏行业用来称之为“随机,无重复阵列”的东西。)
func pickName() {
if names.isEmpty() {
names = selectedNames
selectedNames = [:]
}
let randomIndex = Int(arc4random_uniform(UInt32(names.count)))
let name = names.remove(at: randomIndex) // remove and return in 1 step!
selectedNames.append(name)
return name
}
答案 1 :(得分:0)
根据NRitH的答案尝试这样的事情
var names = [adam, connor, drew, schwenk, langan, tram, trey, joey, nate, goose]
var selectedNames = [String]()
func pickName() -> String? {
if names.isEmpty {
names = selectedNames
selectedNames = []
return nil
} else {
let randomIndex = Int(arc4random_uniform(UInt32(names.count)))
let randomName = names[randomIndex]
removeName(randomName)
return randomName
}
}
private func removeName(_ name: String) {
guard let index = names.index(of: name) else { return }
names.remove(at: index)
selectedNames.append(name)
}
答案 2 :(得分:0)
方法.remove(at:x)删除特定索引处的项目,也返回该项目。您可以将删除的值存储在名为alreadyDrafted的数组中,而不是使用NRitH建议。
var name = ["Adam", "Connor", "Drew", ... "Goose"]
var pickedNames = [String]()
func pickName() -> String {
let randomIndex = Int(arc4random_uniform(UInt32(names.count - 1))) // you get a Number which you use later as an Index, you don't get the name
let pickedName = names.remove(at: randomIndex)
pickedNames.insert(pickedName, at = 0)
if( names.empty ) {
names = pickedNames // reset the array
}
return pickedName
}
该功能现在删除并返回所选名称。
使用.count()时,请记住它返回数组中的项数。但是数组从0开始,这意味着1(第一)项存储在0
let firstItem = array[0]
这些让我们知道最后一项是在.count() - 1.当randomIndex = 10时,你永远不会选择adam并收到错误,因为最后一个值存储在9。
看一下非常有帮助的苹果文档。 Swift Programming Language: Collection Types
答案 3 :(得分:0)
你问的内容略有不同:
func ranomizeElements(elements: [String]) -> [String]
{
var allElements = elements
var randomlyOrderedElements: [String] = []
while allElements.count > 0
{
let randomIndex = Int(arc4random_uniform(UInt32(allElements.count)))
let randomElement = allElements.remove(at: randomIndex)
randomlyOrderedelEments.append(randomElement)
}
return randomlyOrderedElements
}
您可以保留玩家的静态数组并继续调用该功能。只需为每轮草案迭代func的结果。