【问题标题】:How to sort array based on another arrays position?如何根据另一个数组位置对数组进行排序?
【发布时间】:2023-03-05 18:44:01
【问题描述】:

我有一个tableView,其样式为Right Detail。因此我有 2 个arrays,一个用于textLabels 数据,另一个用于detailTextLabel

将有 2 个“排序依据”选项。一个将按textLabels 数据排序,第二个将按detailTextlabels 数据排序。所以当我对第一个arraytextLabels array)进行排序时,第二个array (detailTextLablesarray) will also have to get sorted based on the firstarray`。

我知道如何对arrays 进行排序,但是如何根据另一个array 对另一个array 进行排序?

这是我对array 进行排序的方式:(这是Dates 中的array

firstArray.sort({ (a, b) -> Bool in
    a.earlierDate(b) == a
})

【问题讨论】:

  • 您尝试过什么,遇到过什么问题?请附上相关代码sn-ps。见How to Ask
  • 而且,FWIW,我建议不要有 2 个单独的数组,而是有 1 个数组,其中包含多个字段的对象。
  • 你的意思是字典吗?
  • 不,可能类似于struct Item { let text, detailText: String }
  • 甚至[(text: String, detailText: String)]。有两个数组是错误的。

标签: ios arrays swift sorting


【解决方案1】:

首先,为什么没有两个数组?因为您只有一个 UITableViewCells 数组,并且您希望将与特定表格视图单元格关联的所有数据保存在一起。这使得尝试协调多个数组的排序(您要求做的事情)变得不必要。

但如果你真的想这样做:

var array1 = ["1", "3", "2"]
var array2 = ["One", "Three", "Two"]

let sortedFoo = zip(array1, array2).sort { $0.0 < $1.0 }

array1 = sortedFoo.map { $0.0 }
array2 = sortedFoo.map { $0.1 }

上述代码的想法是将两个数组组合成一个元组数组,然后根据第一个数组中的元素对它们进行排序,然后将该单个数组分解为两个单独的数组。

换句话说,既然您必须将两个数组组合成一个数组来进行排序,那么您不妨一开始就将它们放在一个数组中。 :-)

【讨论】:

    【解决方案2】:

    有点乱,不过你可以使用enumerate同时处理索引和元素:

    array1.enumerate().sort {
        return $0.element < $1.element
    }.map {$0.element}
    
    array1.enumerate().sort {
        return array2[$0.index] < array2[$1.index]
    }.map {$0.element}
    

    但是使用一个数组确实更简单/更容易。

    struct Item {
        let prop1: Int
        let prop2: String
    }
    
    var array = [
        Item(prop1: 1, prop2: "c"),
        Item(prop1: 2, prop2: "b"),
        Item(prop1: 3, prop2: "a")
    ]
    
    array.sort { $0.prop1 < $1.prop1 }
    
    array.sort { $0.prop2 < $1.prop2 }
    

    【讨论】:

    • 我是 swift 的新手,从未使用过结构。我如何将项目添加到这种array
    • 感谢您的回答s!!我试过了,在sort 的行,我收到以下错误:无法使用类型为“((_,_)-> _)”的参数列表调用“排序”
    【解决方案3】:

    在排序后的数组上使用positionOf如何在I排序后的数组中找到对应的索引?

    【讨论】:

    • 绝对是解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-02
    相关资源
    最近更新 更多