按数组之一的顺序对两个数组进行排序 [Swift 3.0 - Xcode 8]

Posted

技术标签:

【中文标题】按数组之一的顺序对两个数组进行排序 [Swift 3.0 - Xcode 8]【英文标题】:Sorting two arrays by the order of one of the arrays [Swift 3.0 - Xcode 8] 【发布时间】:2017-07-24 07:49:21 【问题描述】:
var ArrayToShowInTable = [String]()

我有两个数组:

let list = ["Carrot", "Apple", "Toothbrush", "Pear", "Oranges"]
let price = [3.50, 2.50, 1.50, 3.25, 4.25]

我想按价格(从小到大)订购这两个阵列, 所以我得到类似的东西:

list = ["Toothbrush", "Apple", "Pear", "Carrot", "Oranges"]
price = [1.50, 2.50, 3.25, 3.50, 4.25]

所以我可以让他们加入他们

for i in 0...list.count-1
let join = list[i] += "\(price[i])"
ArrayToShowInTable.append(join)

然后在 TableView 中呈现它

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    return (ArrayToShowInTable.count)



func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
    let cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "TableCell")
        cell.textLabel?.text = ArrayToShowInTable[indexPath.row] as? String
    return (cell)

有没有办法做到这一点? 也许使用结构并打印到表格?

请帮忙??

【问题讨论】:

【参考方案1】:

创建Dictionary 以匹配ProductsPrices。数组中的处理很难处理。

let product = ["Carrot" : 3.50, "Apple" : 2.50, "Toothbrush" : 1.50, "Pear" : 3.25, "Oranges" : 4.25]


var sortedItem = product.sorted  ( first : (key: String, value: Double), second:(key: String, value: Double)) -> Bool in
    return first.value < second.value


var productList = [String]()
var priceList =  [Double]()

for (key, value) in sortedItem  
    productList.append(key)
    priceList.append(value)


print(productList)
print(priceList)

【讨论】:

【参考方案2】:

为什么不创建对象:

class Product
    var price : Double = 0.0
    var name: String =""
    init(price:Double, name:String) 
         self.price = price
         self.name = name
    

然后你可以声明你的数组:

var arrayToShowInTable = [Product]()

您只能使用arrayToShowInTable

arrayToShowInTable = [Product(price:3.5, name:"Carrot"), Product(price:2.5 ,name: "Apple"), Product(price: 1.5,name: "Toothbrush"), Product(price: 3.25, name: "Pear"), Product(price: 4.25,name: "Oranges")]

然后,您可以将其排序如下:

arrayToShowInTable = arrayToShowInTable.sorted($0.price < $1.price)

【讨论】:

【参考方案3】:

您可以使用字典,使价格和名称同步,您将不得不担心排序后同步它们的位置。

使用 sorted 函数对字典进行排序,然后在 table view 函数中使用。

let pricesList = ["Carrot": 3.50, "Apple": 2.50, "Toothbrush": 1.50, "Pear": 3.25, "Oranges": 4.25]

var result = pricesList.sorted(by: (a,b) in
    a.value as Double! < b.value as Double!

) //or sorted $0.value < $1.value 

在表格视图中:

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    return result.count



func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
    let cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "TableCell")
        cell.textLabel?.text = "\(result[i].key) \(result[i].value)"
    return (cell)

如果你必须使用两个数组,你可以从它们中创建字典。 如果你不会使用字典,请告诉我。

【讨论】:

【参考方案4】:

您可以使用字典数组。

let list = ["Carrot" : 3.50, "Apple" : 2.50, "Toothbrush" : 1.50, "Pear" : 3.25 , "Oranges" : 4.25]
let sortedList = fruitsDict.sorted $0.value < $1.value 

【讨论】:

字典没有顺序,无法排序 对不起,这将是字典数组。

以上是关于按数组之一的顺序对两个数组进行排序 [Swift 3.0 - Xcode 8]的主要内容,如果未能解决你的问题,请参考以下文章

使用 Swift 对两个数组进行排序

对带有异常的字符串数组进行排序 Swift

根据属性的动态列表对 Swift 数组进行排序

Swift2 - 根据另一个 INT 数组的排序顺序对多个数组进行排序

Swift 2.0 按属性对对象数组进行排序

Swift:按排序描述符对数组进行排序