如何基于另一个数组的位置对数组进行sorting?
我有一个tableView
,它的风格是Right Detail
。 因此,我有2个arrays
,一个是textLabels
数据,另一个是detailTextLabel
。
将会有2个“sorting”选项。 一个将按textLabels
数据sorting,第二个按照detailTextlabels
数据sorting。 所以,当我sorting第一个array
( textLabels 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,然后将该单个数组分解成两个单独的数组。
换句话说,既然你必须将这两个数组合并成一个来完成这个任务,那么你也可以把它们放在一个数组中。 🙂