在Swift中对多维数组(数组中的数组)使用排序



我想知道如何在Swift中使用多维数组的sortsorted函数?

例如他们的一个数组:

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

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

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

那么我们该怎么做呢?谢谢

您可以使用sort:

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

结果:

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

我们可以选择将参数强制转换为Int,因为数组的内容是AnyObject。

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


如果您将内部数组声明为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]]

Swift 5.0更新

sort函数被重命名为sorted。这是的新语法

let sortedArray = array.sorted(by: {$0[0] < $1[0] })

不同于";排序";函数在<=swift4.0,sort函数不修改数组中的元素。相反,它只是返回一个新数组。

例如,

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")]

我认为应该使用元组数组,这样类型转换就不会有任何问题:

let array : [(Int, String)] = [
    (5, "test123"),
    (2, "test443"),
    (3, "test663"),
    (1, "test123")
]
let sortedArray = array.sorted { $0.0 < $1.0 }

Swift是关于类型安全的

(如果使用Swift 2.0,请将sorted更改为sort

在Swift 3,4中,您应该使用"Compare"。例如:

let sortedArray.sort { (($0[0]).compare($1[0]))! == .orderedDescending }

相关内容

  • 没有找到相关文章

最新更新