在Swift中使用sort为多维数组(数组中的数组)?

He *_*何一非 2 arrays sorting multidimensional-array swift

我想知道我们如何在Swift中使用sortsorted运行多维数组?

例如他们的数组:

[
    [5, "test888"],
    [3, "test663"],
    [2, "test443"],
    [1, "test123"]
]
Run Code Online (Sandbox Code Playgroud)

我想通过第一个ID从低到高排序:

[
    [1, "test123"],
    [2, "test443"],
    [3, "test663"],
    [5, "test888"]
]
Run Code Online (Sandbox Code Playgroud)

那我们怎么做呢?谢谢!

Mit*_*gam 7

Swift 5.0 更新

排序函数更名为排序函数。这是新语法

let sortedArray = array.sorted(by: {$0[0] < $1[0] })
Run Code Online (Sandbox Code Playgroud)

与 <= swift4.0 中的“排序”函数不同,排序函数不会修改数组中的元素。相反,它只是返回一个新数组。

例子,

let array : [(Int, String)] = [
    (5, "test123"),
    (2, "test443"),
    (3, "test663"),
    (1, "test123")
]

let sorted = array.sorted(by: {$0.0 < $1.0})
print(sorted)
print(array)


Output:
[(1, "test123"), (2, "test443"), (3, "test663"), (5, "test123")]

[(5, "test123"), (2, "test443"), (3, "test663"), (1, "test123")]
Run Code Online (Sandbox Code Playgroud)


aya*_*aio 6

你可以使用sort:

let sortedArray = arr.sort { ($0[0] as? Int) < ($1[0] as? Int) }
Run Code Online (Sandbox Code Playgroud)

结果:

[[1,test123],[2,test443],[3,test663],[5,test123]]

我们可选地将参数转换为Int,因为数组的内容是AnyObject.

注意:sort以前sorted在Swift 1中命名.


如果将内部数组声明为AnyObject,则没有问题,空的数组不会被推断为NSArray:

var arr = [[AnyObject]]()

let sortedArray1 = arr.sort { ($0[0] as? Int) < ($1[0] as? Int) }

print(sortedArray1) // []

arr = [[5, "test123"], [2, "test443"], [3, "test663"], [1, "test123"]]

let sortedArray2 = arr.sort { ($0[0] as? Int) < ($1[0] as? Int) }

print(sortedArray2)  // [[1, test123], [2, test443], [3, test663], [5, test123]]
Run Code Online (Sandbox Code Playgroud)