如何基于另一个数组的位置对数组进行sorting?

我有一个tableView ,它的风格是Right Detail 。 因此,我有2个arrays ,一个是textLabels数据,另一个是detailTextLabel

将会有2个“sorting”选项。 一个将按textLabels数据sorting,第二个按照detailTextlabels数据sorting。 所以,当我sorting第一个arraytextLabels array ),第二个array (detailTextLables数组) will also have to get sorted based on the first数组) will also have to get sorted based on the first

我知道如何sortingarrays ,但我怎么能sorting一个基于另一个array

下面是我对array进行sorting的方法:(这是一个Dates array

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

这有点乱,但你可以使用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 } 

如何在sorting后的数组上使用positionOf在I sorted数组中find相应的索引?

首先,为什么不能有两个数组? 因为你只有一个UITableViewCells数组,所以你想把所有与特定的表视图单元格相关的数据放在一起。 这使得需要尝试协调多个数组的sorting(您要求做的)是不必要的。

但是,如果你真的想这样做:

 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 } 

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

换句话说,既然你必须将这两个数组合并成一个来完成这个任务,那么你也可以把它们放在一个数组中。 🙂