对不起,如果这是一个愚蠢的问题,但我尝试的一切似乎都是错误的!(我是 Swift 的新手(。
我有 2 个字符串数组,我需要比较匹配项,然后返回一个包含这些匹配项索引位置的数组......即:
let array1 = ["abc", "def", "ghi", "jkl", "xyz", "uhr"]
let array2 = ["ghi", "xyz", "uhr"]
// Search array1 for instances of array2
// Result I want is: [2, 4, 5]
我缺少一个简单的功能吗?!提前感谢您的帮助。
对于有效的解决方案,您可以先创建一个索引。索引将第一个数组中的每个元素映射到其在数组中的位置。两个数组只遍历一次:
let array1 = ["abc", "def", "ghi", "jkl", "xyz", "uhr"]
let array2 = ["ghi", "xyz", "uhr"]
let index = Dictionary(uniqueKeysWithValues: array1.enumerated().map {
($0.element, $0.offset)
})
let result = array2.compactMap { index[$0] }
print(result) // [2, 4, 5]
如果array1
中的元素不知道是唯一的,则索引的计算方式必须略有不同:
let index = Dictionary(array1.enumerated().map { ($0.element, $0.offset) },
uniquingKeysWith: { (first, _) in first })
第二个参数是一个闭包,它控制在重复键的情况下将哪个值放入字典中。在这里,我们选择数组中第一次出现的元素的位置。
var indexArr: [Int] = []
for element in array2 {
if let elementIndex = array1.firstIndex(of: element) {
indexArr.append(elementIndex)
}
}
print(indexArr)
var results: [Int] = []
for i in 0..<array1.count {
for j in 0..<array2.count {
if array1[i] == array2[j] {
results.append(i)
}
}
}
print(results)