按数组之一的顺序对两个数组进行排序 [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
以匹配Products
和Prices
。数组中的处理很难处理。
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]的主要内容,如果未能解决你的问题,请参考以下文章