Swift:更好的方法来搜索包含数组内部数字的数组的索引?

时间:2017-07-29 18:54:52

标签: arrays 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'
    }
}

2 个答案:

答案 0 :(得分: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) 
    }
}

答案 1 :(得分:1)

使用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")
}