【问题标题】:Sort 2 linked arrays in Swift? [duplicate]在 Swift 中对 2 个链接数组进行排序? [复制]
【发布时间】:2018-05-02 14:49:25
【问题描述】:

我想对一个数组进行排序并将“镜像”顺序更改为另一个相同维度的数组。

这个问题类似于这个问题,但对于 Swift 语言: Better way to sort 2 "linked" arrays?

例子:

let arr1 = ["a", "b", "c", "d", "e"]
let arr2 = [1, 5, 9, 2, 3]
... //sort
//result == ["a", "d", "e", "b", c"]

我知道的近似解决方案:

for i in stride(from 0, to: arr2.count - 1, by: 1) {
  for j in stride(from i + 1, to: arr2.count, by: 1) {
    if arr2[i] > arr2[j] {
      ...//swap arr2[i] and arr2[j]
      ...//swap arr1[i] and arr1[j]
    }
  }
}

但是他们为在 Swift 中高级处理数组添加了许多额外的可能性。那么有没有可能用内部的 Swift 特性来简化这个解决方案呢?

注意:arr1arr2 作为单独的数组给出。

已编辑

是的。您发现了类似的问题,但它们的标题很糟糕,并且不能反映作者需要的答案。换句话说,如果您删除/关闭我的问题,人们可能会继续再次询问,因为无法找到现有标题的内容!

【问题讨论】:

  • 正确的解决方案是只有一个数组。定义一个struct 并将您的数据妥善保存在一起。
  • @staticVoidMan 是的,他们问同样的事情。但与此同时,他们并没有清楚地提出他们的问题(您的链接中还有另一个重复的问题)。 sort array based on array 听起来像 2 个具有类继承关系的数组。 2 linked arrays 更清晰,因为这些数组没有明确的关系,并且使用我的标题更容易找到 - 我看到你打算关闭并删除我的问题
  • 没有计划删除您的问题。它将作为副本保持关闭。这很好,对你没有任何负面影响。由于标题更好,进行搜索的人可能会遇到您的问题。他们将在此处看到答案以及指向副本及其所有答案的链接。人人共赢。

标签: arrays swift sorting


【解决方案1】:
  • zip 数组在一起
  • sort数组2的新数组
  • map数组到数组1

    let arr1 = ["a", "b", "c", "d", "e"]
    let arr2 = [1, 5, 9, 2, 3]
    
    let result = zip(arr1, arr2) // [("a", 1), ("b", 5), ("c", 9), ("d", 2), ("e", 3)]
                    .sorted(by: {$0.1 < $1.1}) // [("a", 1), ("d", 2), ("e", 3), ("b", 5), ("c", 9)]
                    .map{ $0.0 } // ["a", "d", "e", "b", "c"]
    

【讨论】:

  • 谢谢。我唯一的问题是可以修复您的代码以按名称而不是数字访问元组吗?
  • 您可以使用完整的语法,其中简写 $0 / $1 由参数标签表示。使用代码完成并在闭包占位符上按return
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-14
  • 2021-12-09
  • 1970-01-01
  • 2021-11-14
  • 1970-01-01
  • 2014-02-11
  • 1970-01-01
相关资源
最近更新 更多