【问题标题】:Swift: Get indexes of smallest items in 2-dimensional arraySwift:获取二维数组中最小项目的索引
【发布时间】:2015-10-28 21:26:15
【问题描述】:

在 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][0],[1][0],[0][3],[0][1],[1][2]?

标签: arrays swift multidimensional-array


【解决方案1】:

没有“内置”方法。这是一种可能的方法:

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() 二维数组的列。与flatMap()一起 和map(),这给出了(i, j, elem) 三元组数组,其中 i 是行索引,jelem 的列索引。

这个数组是按照元素排序的,然后 映射到二维索引数组。

sorted2DIndices[0] 是最小元素的二维索引等。 您还可以使用

获取四个最小元素的索引
let first4 = sorted2DIndices.prefix(4)
print(first4)
// [(0, 0), (1, 0), (0, 3), (0, 1)]

【讨论】:

  • 很难理解,但它有效。谢谢!
【解决方案2】:

我想这就是你要找的东西:

let array = [[1,4,8,3,9],[2,6,5,13,19]]
array.map { $0.indexOf($0.minElement()!)! }

【讨论】:

  • 结果:[Optional(0), Optional(0)]。这不是OP所要求的。我不明白 OP 想要什么,但这肯定不是。
  • 这是最小项的索引,听起来很酷。不幸的是我不明白语法,如何获得第二小的?
猜你喜欢
  • 1970-01-01
  • 2019-08-31
  • 2015-10-07
  • 2015-07-22
  • 2013-05-02
  • 2016-03-11
  • 1970-01-01
  • 2021-02-19
  • 2022-10-25
相关资源
最近更新 更多