给定一个包含如下元素的数组:
let array = [[a], [b, c], [d, e, f]]
是否有一种优雅的方法将此数组转换为一个返回带有外部数组索引的元组的数组:
let result = [(a, 0), (b, 1), (c, 1), (d, 2), (e, 2), (f, 2)]
答案 0 :(得分:9)
let array = [["a"], ["b", "c"], ["d", "e", "f"]]
let result = zip(array, array.indices).flatMap { subarray, index in
subarray.map { ($0, index) }
}
result
是:
[("a", 0), ("b", 1), ("c", 1), ("d", 2), ("e", 2), ("f", 2)]
我使用了zip(array, array.indices)
而不是array.enumerated()
,因为您特意要求使用数组 index 的元组 - enumerated()
生成基于零的的元组整数偏移。如果您的源集合是一个数组,它并没有什么区别,但其他集合(如ArraySlice
)的行为会有所不同。