Swift中数组打乱后,如何更新变量为指定字符串的新索引值?
解决数组打乱后更新变量为指定元素索引的问题
要实现把变量zero更新为字符串"zero"在打乱后数组中的新索引,其实很简单,利用Swift数组内置的firstIndex(of:)方法就能搞定,具体步骤如下:
核心思路
数组打乱后,我们只需要找到目标元素(这里是"zero")在数组中的位置,再把这个位置的值赋值给变量zero即可。因为你的数组中每个元素都是唯一的,所以firstIndex(of:)会精准返回目标元素的索引。
具体代码实现
结合你提供的代码,修改后的完整逻辑如下:
weak var numberwordimage: UIImageView! var numberwords = ["zero", "one", "two", "three", "four", "five"] var zero = 0 extension Array { public mutating func shuffle() { for i in stride(from: count - 1, to: 1, by: -1) { let random = Int(arc4random_uniform(UInt32(i+1))) if i != random { self.swapAt(i, random) } } } } // 打乱数组 numberwords.shuffle() // 更新zero变量为"zero"在数组中的新索引 if let newZeroIndex = numberwords.firstIndex(of: "zero") { zero = newZeroIndex } else { // 兜底处理:如果数组中意外没有"zero",给个默认值 zero = 0 }
代码解释
numberwords.firstIndex(of: "zero"):这个方法会遍历数组,返回第一个匹配"zero"的元素的索引,类型是Optional<Int>(因为可能找不到元素)。- 用可选绑定
if let来安全处理可选值:如果找到索引,就把它赋值给zero;如果没找到(虽然你的场景里几乎不会发生),就给zero设置默认值0。 - 如果你能100%确定数组中一定存在"zero",也可以用强制解包简化代码:
zero = numberwords.firstIndex(of: "zero")!,但这种写法在元素不存在时会崩溃,所以更推荐安全的可选绑定写法。
比如你假设的打乱后数组是["five", "four", "two","one","zero","three"],执行这段代码后,zero的值就会被更新为4,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Nick Senior
相关产品推荐
相关产品推荐

