2016-10-14 17 views
0

[String : String]の配列を値でソートする最も効率的な方法は何ですか?例えば値で辞書のスワイプ配列を並べ替え

let dicts = [["key": "4"], ["key": "4"], ["key": "3"], ["key":"1"]] 

はその後、ソートした後、私は

dicts = [["key": "1"], ["key": "3"], ["key": "4"], ["key":"4"]] 
+0

@JoshCaswellあなたは正しいです。キー名は常に各辞書内で同じです。私は質問を更新しました。 – androisojavaswift

+0

各dictの値を文字列ではなく整数として保存できますか? – Jawwad

答えて

2

それはちょっと長ったらしいですが、それが不足しているキーと非整数値の良好な制御であなたを取得したいです。

var array = [["key": "1"], ["key": "3"], ["key": "2"], ["key":"4"]] 
array.sort { (lhs, rhs) -> Bool in 
    if let leftValue = lhs["key"], let leftInt = Int(leftValue), let rightValue = rhs["key"], let rightInt = Int(rightValue) { 
     return leftInt < rightInt 
    } else { 
     return false // NOTE: you will need to decide how to handle missing keys and non-int values. 
    } 
} 

あなたの比較についてもう少し柔軟性があり、少し掃除したいものがあれば。

array.sort { 
    guard let leftValue = $0["key"], let rightValue = $1["key"] else { 
     return false // NOTE: you will need to decide how to handle missing keys. 
    } 

    return leftValue.localizedStandardCompare(rightValue) == .orderedAscending 
} 
+0

ありがとう、それは動作します! – androisojavaswift