2015-06-27 2 views
2

Я хочу знать, как мы можем использовать функцию sort или sorted для многомерного массива в Swift?Используйте сортировку для многомерного массива (массив в массиве) в Swift?

Например их массив:

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

И я хочу, чтобы отсортировать его по первым идентификаторами от низкого до высокого:

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

Так как мы можем это сделать? Благодаря!

ответ

5

Вы можете использовать sort:

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

Результат:

[[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]] 
+1

быть осторожным, это снова изменилось в Swift 3, где 'sort' является метод Mutating, и 'sorted' является тем, который возвращает новый массив ... – Moritz

2

Я думаю, вы должны использовать массив кортежей, тогда у вас не будет проблем с типом приведения:

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

let sortedArray = array.sorted { $0.0 < $1.0 } 

Swift все о безопасности типа

(Изменить sorted к sort, если вы используете Swift 2.0)

+0

ОК, этот код работает нормально. И я также хочу спросить, как мы можем использовать отсортированные для сортировки NSDate (от настоящего до прошлого)? :) – Arefly

 Смежные вопросы

  • Нет связанных вопросов^_^