【问题标题】:Looking for word in 2D Array [duplicate]在二维数组中查找单词 [重复]
【发布时间】:2020-07-16 03:33:52
【问题描述】:

当按下按钮时,我正在尝试获取 2D 数组中单词的索引(即单词在数组中的位置)。我要查找的词是按下按钮的标题。

@IBAction func buttonPressed(_ sender: UIButton) {

    let buttonSelected = sender.currentTitle!
    let findIndex = myArray.firstIndex(of: englishButtonSelected)!

}

当我构建代码时出现此错误:

无法将“String”类型的值转换为预期的参数类型“[String]”

常量“buttonSelected”是一个字符串。

我是 swift 新手,仍在学习。任何帮助深表感谢!谢谢!

使用 Xcode 11.4

【问题讨论】:

  • 您是否编写了 UIButton 扩展来获取带有currentTitle 的按钮标题?你在哪里声明myArray?抱歉,您的代码块信息量不足
  • @LeoDabus 谢谢你,这很有帮助!我将在我的代码中的其他区域使用这些方法。看起来很有效!

标签: arrays swift xcode indexing 2d


【解决方案1】:

你快到了。 firstIndex 将返回给定元素出现的第一个索引。因为myArray 是一个[[String]](2D 数组),所以它期望你在其中放入一个[String],因为每个元素都是一个[String]。例如:

let myArray = [["A", "B"], ["C"], ["D", "E"]]
let index = myArray.firstIndex(of: ["D", "E"]) // index = 2

如果要获取按钮标题的“绝对”索引(在上面的示例中,这将对应于“C”为 2 或“E”为 4 的索引),您可以使用:

myArray.flatMap { $0 }.firstIndex(of: buttonTitle)

.flatMap 将二维数组折叠成常规数组。如果要在其自己的子数组中查找按钮标题的索引,则必须循环遍历 2D 数组并检查按钮标题的每个子数组的索引。

【讨论】:

  • 非常感谢,这很有意义!我希望输出类似于“位置 [0][9]”,那么如何按照您的建议循环搜索?
【解决方案2】:

经过一番谷歌搜索,我发现了如何找到我正在寻找的输出。这给了我二维数组的 [?][?] 格式的确切索引!

for i in 0..<myArray.count {
    for j in 0..<myArray[i].count {
        if myArray[i][j] == buttonSelected {
            print (i, j)
        }
    }
}

【讨论】:

  • 你为什么不看链接的答案?
  • @Alexander-ReinstateMonica 该链接是在我找到解决方案后给出的。
  • 我建议你去看看。手动索引、嵌套循环等在 Swift 中非常少见,也不是很传统。大多数操作已经被纳入标准库(在这种情况下,查找条件为真的第一个索引),因此通常使用这些操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-09
  • 2013-10-17
相关资源
最近更新 更多