簡體   English   中英

如何根據另一個數組位置對數組進行排序?

[英]How to sort array based on another arrays position?

我有一個tableView ,其風格是Right Detail 因此,我有2個arrays ,一個用於textLabels數據,另一個用於detailTextLabel

將有2個“排序依據”選項。 一個將按textLabels數據排序,第二個將按detailTextlabels數據排序。 因此,當我對第一個arraytextLabels 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM