如何按值对字典进行排序?

时间:2017-02-12 14:35:31

标签: swift sorting dictionary

我的字典是这样的:

var items = [Int: [String]]() 
var itemsResult = [Int: [String]]()

itmesResult存储从服务器下载的数据。 并将数据传递给items = itmesResult

的项目使用

该值有3个元素,如[“Apple”,“/ image / apple.png”,“29”] 我希望按照Apple的第一个值对字典进行排序。

for (k,v) in (itemsResult.sorted(by: { $0.value[0] < $1.value[0] })) { 
  items[k] = v
}

上述代码的结果不是我的期望。

我想按字母顺序对其进行排序,我该怎么做?

编辑:

来源:

1:["Apple","/image/apple.png","29"]
2:["AAA","/image/aaa.png","29"]
3:["Banana","/image/banana.png","29"]

排序方法:

2:["AAA","/image/aaa.png","29"]
1:["Apple","/image/apple.png","29"]
3:["Banana","/image/banana.png","29"]

我想先按值排序。

2 个答案:

答案 0 :(得分:6)

因此,如果我举个例子,这就是诀窍:

android:text

正确的做法是使用对象当然,并注意我不会检查&#34;首先&#34;每个数组中的对象,但这不是一个需要更改的问题。

如果您正在寻找,请告诉我,输出结果为:

var items = [Int: [String]]()

items[0] = ["Apple","/image/apple.png","29"]
items[1] = ["AAA","/image/aaa.png","29"]
items[2] = ["Banana","/image/banana.png","29"]

let itemResult = items.sorted { (first: (key: Int, value: [String]), second: (key: Int, value: [String])) -> Bool in
    return first.value.first! < second.value.first!
}

print (itemResult)

编辑: 还要注意,这种情况实际上并没有排序&#34;字典,因为字典按定义没有排序,这将创建一个使用数组索引排序的键值对象数组

答案 1 :(得分:2)

不是将这些变量保存到数组数组中,而是将它们作为字典数组。

你可以这样做:

var dictionaries:[Dictionary<String, String>] = []
for item in items {
  let dictionary = {"name": item[0], "url": item[1], "id" : item[2]}
  dictionaries.append(dictionary)
}

你可以得到这样的字典排序列表:

dictionaries.sorted(by: { $0["name"] < $1["name"] })