Swift:获取二维数组中最小项的索引

时间:2015-10-28 21:26:16

标签: arrays swift multidimensional-array

在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个最小距离的索引能够记录区域。

2 个答案:

答案 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是行索引,jelem的列索引。

此数组根据元素排序,然后 映射到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()!)! }