[英]How to sort array based on another arrays position?
我有一個tableView
,其風格是Right Detail
。 因此,我有2個arrays
,一個用於textLabels
數據,另一個用於detailTextLabel
。
將有2個“排序依據”選項。 一個將按textLabels
數據排序,第二個將按detailTextlabels
數據排序。 因此,當我對第一個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
。
我知道如何對arrays
進行排序,但是如何根據另一個array
對一個array
排序?
這是我對array
進行排序的方式:(這是Dates
array
。
firstArray.sort({ (a, b) -> Bool in
a.earlierDate(b) == a
})
首先,為什么不有兩個數組呢? 因為您只有一個UITableViewCell數組,並且您希望將與特定表視圖單元關聯的所有數據保持在一起。 並且它需要嘗試協調多個數組(您要求做的事情)的排序是不必要的。
但如果你真的想這樣做:
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 }
上面代碼的想法是它將兩個數組組合成一個元組數組,然后根據第一個數組中的元素對它們進行排序,然后將該單個數組分解為兩個單獨的數組。
換句話說,由於您必須將兩個數組合並為一個以進行排序,因此您最好將它們放在一個數組中。 :-)
如何在排序數組上使用positionOf
來查找I排序數組中的相應索引?
它有點亂,但您可以使用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 }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.