【问题标题】:Swift: Better way to search for the index of an array containing a number inside an array?Swift:在数组中搜索包含数字的数组索引的更好方法?
【发布时间】:2017-07-29 18:54:52
【问题描述】:

很想知道是否有更好的方法来做到这一点。我有一个包含整数的数组数组。所有整数都是唯一的。我想搜索给定的数字并返回第一个数组的索引。我不在乎包含数字的数组的索引是什么。

这可以满足我的要求,但我是 swift 新手,并认为有更好的方法。

let arr:[[Int]] = [[0], [1], [2, 3], [4], [11, 12, 13, 14, 15, 16], [5], [6], [7], [8], [9], [10]]

var t = -1
for q in arr {
    t += 1
    if let x = q.index(of: 13) { // <-- looking for the index that contains 13
        print ("t: \(t)") // <-- this is what I want. Returns '4'
    }
}

【问题讨论】:

    标签: arrays swift


    【解决方案1】:

    这是一种方法:

    let arr: [[Int]] = [[0], [1], [2, 3], [4], [11, 12, 13, 14, 15, 16], [5], [6], [7], [8], [9], [10]]
    
    for (i, a) in arr.enumerated() {
        if let _ = a.index(of: 13) {
            print(i)
        }
    }
    

    它使用enumerated() 集合方法。它返回一个元组,其中包含数组i 的索引和数组a 的实际元素。

    使用函数式编程

    如果这更符合你的风格,这里是函数式编程版本:

    arr.enumerated().map { $0 }.map { i, a in
        if let _ = a.index(of: 13) { 
            print(i) 
        }
    }
    

    【讨论】:

    • 太好了。谢谢!我在文档中遇到了这个问题,但无法让它做我想做的事情。
    【解决方案2】:

    使用index(where:的无循环解决方案

    let arr: [[Int]] = [[0], [1], [2, 3], [4], [11, 12, 13, 14, 15, 16], [5], [6], [7], [8], [9], [10]]
    
    if let index = arr.index(where: { $0.contains(13) }) {
        print(index)
    } else {
        print("not found")
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-11
      • 2014-01-13
      • 1970-01-01
      • 1970-01-01
      • 2021-04-29
      • 1970-01-01
      • 2021-08-06
      • 2019-08-06
      相关资源
      最近更新 更多