我试图对由字典组成的Swift数组进行排序.我在下面准备了一个工作示例.目标是通过字典中的"d"元素对整个数组进行排序.我准备了这个可以放入Swift项目的工作示例:
var myArray = Array<AnyObject>()
var dict = Dictionary<String, AnyObject>()
dict["a"] = "hickory"
dict["b"] = "dickory"
dict["c"] = "dock"
dict["d"] = 5
myArray.append(dict)
dict["a"] = "three"
dict["b"] = "blind"
dict["c"] = "mice"
dict["d"] = 6
myArray.append(dict)
dict["a"] = "larry"
dict["b"] = "moe"
dict["c"] = "curly"
dict["d"] = 2
myArray.append(dict)
println(myArray[0])
println(myArray[1])
println(myArray[2])
}
Run Code Online (Sandbox Code Playgroud)
这导致以下输出到日志:
{
a = hickory;
b = dickory;
c = dock;
d = 5;
}
{
a = three;
b = blind;
c = mice;
d = 6;
}
{
a = larry;
b = moe;
c = curly;
d = 2;
}
Run Code Online (Sandbox Code Playgroud)
目标是通过"d"元素对数组进行排序,以便上面的输出将更改为以下内容(基于数字顺序"d":'2,5,6'):
{
a = larry;
b = moe;
c = curly;
d = 2;
}
{
a = hickory;
b = dickory;
c = dock;
d = 5;
}
{
a = three;
b = blind;
c = mice;
d = 6;
}
Run Code Online (Sandbox Code Playgroud)
还有一些看似相似的问题,但是当你看到它们时,很明显它们并没有解决这个问题.谢谢您的帮助.
ois*_*sdk 18
要声明,如果需要将其保留为AnyObject,则必须显式转换:
var myArray = Array<AnyObject>()
var dict = Dictionary<String, AnyObject>()
dict["a"] = ("hickory" as! AnyObject)
dict["b"] = ("dickory" as! AnyObject)
dict["c"] = ("dock" as! AnyObject)
dict["d"] = (6 as! AnyObject)
myArray.append(dict as! AnyObject)
dict["a"] = ("three" as! AnyObject)
dict["b"] = ("blind" as! AnyObject)
dict["c"] = ("mice" as! AnyObject)
dict["d"] = (5 as! AnyObject)
myArray.append(dict as! AnyObject)
dict["a"] = ("larry" as! AnyObject)
dict["b"] = ("moe" as! AnyObject)
dict["c"] = ("curly" as! AnyObject)
dict["d"] = (4 as! AnyObject)
myArray.append(dict as! AnyObject)
Run Code Online (Sandbox Code Playgroud)
没有附加,你可以这样做:
var myArray: [AnyObject] = [ ([
"a" : ("hickory" as! AnyObject),
"b" : ("dickory" as! AnyObject),
"c" : ("dock" as! AnyObject),
"d" : (6 as! AnyObject)
] as! AnyObject), ([
"a" : ("three" as! AnyObject),
"b" : ("blind" as! AnyObject),
"c" : ("mice" as! AnyObject),
"d" : (5 as! AnyObject)
] as! AnyObject), ([
"a" : ("larry" as! AnyObject),
"b" : ("moe" as! AnyObject),
"c" : ("curly" as! AnyObject),
"d" : (4 as! AnyObject)
] as! AnyObject)
]
Run Code Online (Sandbox Code Playgroud)
这给你相同的结果.虽然,如果只需要更改字典中的值对象,则不需要强制转换数组的元素:
var myArray: [Dictionary<String, AnyObject>] = [[
"a" : ("hickory" as! AnyObject),
"b" : ("dickory" as! AnyObject),
"c" : ("dock" as! AnyObject),
"d" : (6 as! AnyObject)
], [
"a" : ("three" as! AnyObject),
"b" : ("blind" as! AnyObject),
"c" : ("mice" as! AnyObject),
"d" : (5 as! AnyObject)
], [
"a" : ("larry" as! AnyObject),
"b" : ("moe" as! AnyObject),
"c" : ("curly" as! AnyObject),
"d" : (4 as! AnyObject)
]
]
Run Code Online (Sandbox Code Playgroud)
然后,要进行排序,可以使用sort()闭包,它可以对Array进行排序.你提供的闭包有两个参数(名为$ 0和$ 1),并返回一个Bool.如果在$ 1之前订购$ 0,则闭包应返回true,否则返回false.要做到这一点,你必须投入很多:
//myArray starts as: [
// ["d": 6, "b": "dickory", "c": "dock", "a": "hickory"],
// ["d": 5, "b": "blind", "c": "mice", "a": "three"],
// ["d": 4, "b": "moe", "c": "curly", "a": "larry"]
//]
myArray.sort{
(($0 as! Dictionary<String, AnyObject>)["d"] as? Int) < (($1 as! Dictionary<String, AnyObject>)["d"] as? Int)
}
//myArray is now: [
// ["d": 4, "b": "moe", "c": "curly", "a": "larry"],
// ["d": 5, "b": "blind", "c": "mice", "a": "three"],
// ["d": 6, "b": "dickory", "c": "dock", "a": "hickory"]
//]
Run Code Online (Sandbox Code Playgroud)
在Swift 3和4中对字典排序
let sortedResults = (userArray as NSArray).sortedArray(using: [NSSortDescriptor(key: "name", ascending: true)]) as! [[String:AnyObject]]
Run Code Online (Sandbox Code Playgroud)
var myArray: [AnyObject] = []
var dict:[String: AnyObject] = [:]
dict["a"] = "hickory"
dict["b"] = "dickory"
dict["c"] = "dock"
dict["d"] = 5
myArray.append(dict)
dict["a"] = "three"
dict["b"] = "blind"
dict["c"] = "mice"
dict["d"] = 6
myArray.append(dict)
dict["a"] = "larry"
dict["b"] = "moe"
dict["c"] = "curly"
dict["d"] = 2
myArray.append(dict)
let myArraySorted = myArray.sorted{$1["d"] as? Int > $0["d"] as? Int} as! [[String: AnyObject]]
println(myArraySorted) // [[b: moe, a: larry, d: 2, c: curly], [b: dickory, a: hickory, d: 5, c: dock], [b: blind, a: three, d: 6, c: mice]]"
Run Code Online (Sandbox Code Playgroud)
要么
var myArray: [[String:AnyObject]] = []
var dict:[String: AnyObject] = [:]
dict["a"] = "hickory"
dict["b"] = "dickory"
dict["c"] = "dock"
dict["d"] = 5
myArray.append(dict)
dict["a"] = "three"
dict["b"] = "blind"
dict["c"] = "mice"
dict["d"] = 6
myArray.append(dict)
dict["a"] = "larry"
dict["b"] = "moe"
dict["c"] = "curly"
dict["d"] = 2
myArray.append(dict)
let myArraySorted = myArray.sorted{$1["d"] as? Int > $0["d"] as? Int}
println(myArraySorted) // "[[b: moe, a: larry, d: 2, c: curly], [b: dickory, a: hickory, d: 5, c: dock], [b: blind, a: three, d: 6, c: mice]]"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18149 次 |
| 最近记录: |