在Swift中,是否有内置方法来获取二维数组中最小项的索引?像这样的伪代码:
let array = [[1,4,8,3,9],[2,6,5,13,19]]
for item in 0...4 {
2dimensionalIndex = array.smallest(item)
}
然后给我指数[0][0],[1][0],[0][3],[0][1],[1][2]
?
修改
背景:我有一个CircularRegions的二维数组和一个用户位置。由于我只能为地理围栏注册20个区域,因此我计算每个区域的中心与用户位置之间的距离减去区域的半径。现在我有一个二维距离数组。我希望20个最小距离的索引能够记录区域。
答案 0 :(得分:3)
没有“内置”方法。这是一种可能的方法:
let array = [[1,4,8,3,9],[2,6,5,13,19]]
let sorted2DIndices = array.enumerate().flatMap {
(i, row) in row.enumerate().map {
(j, elem) in (i, j, elem)
}
}
.sort { $0.2 < $1.2 }
.map { (i, j, elem) in (i, j) }
print(sorted2DIndices)
// [(0, 0), (1, 0), (0, 3), (0, 1), (1, 2), (1, 1), (0, 2), (0, 4), (1, 3), (1, 4)]
外部enumerate()
枚举行和内部
enumerate()
2D数组的列。与flatMap()
一起
和map()
,这给出了一系列(i, j, elem)
三元组
i
是行索引,j
是elem
的列索引。
此数组根据元素排序,然后 映射到2D索引数组。
sorted2DIndices[0]
是最小元素的2D索引,等等。
您还可以使用
let first4 = sorted2DIndices.prefix(4)
print(first4)
// [(0, 0), (1, 0), (0, 3), (0, 1)]
答案 1 :(得分:0)
我认为这是你正在寻找的东西:
let array = [[1,4,8,3,9],[2,6,5,13,19]]
array.map { $0.indexOf($0.minElement()!)! }