2015-10-31 3 views
1

Я хочу, чтобы преобразовать ниже коды в стриж, На самом деле я хочу, не хочу потерять порядок ключей с использованием AllKeys из NSDictionarySwift, AllKeys, массив, словарь, порядок

NSArray *keys = [myDictionary allKeys]; 
keys = [keys sortedArrayUsingComparator:^(id a, id b) { 
    return [a compare:b options:NSNumericSearch]; 
}]; 
+0

Что вы имеете в виду «не хотите потерять порядок ключей»? Вы хотите, чтобы ключи были заказаны по id или нет? –

+0

Нет никаких особых случаев, на основании которых я могу применить некоторый порядок и получить массив в соответствии с поданной. Просто ключи в NSDictionary являются пользовательскими строками, но я получаю случайный порядок, применяя метод allKeys для NSdictionary. –

+0

Быстрый словарь - коллекция UNORDERED. случайный порядок ключей, данный myDictionary.keys, является нормальным поведением, не так ли? – user3441734

ответ

1

Вы можете сделать то же самое в Swift :

let myDictionary = ["100" : "foo", "2" : "bar"] 

let keys = myDictionary.keys.sort { 
    $0.compare($1, options: .NumericSearch) == .OrderedAscending 
} 

print(keys) // ["2", "100"] 

myDictionary.keys дает (отложенную коллекцию) все словарное ключей и может быть отсортирован. В отличии от sortedArrayUsingComparator (который принимает блок, возвращающийся -10, или +1), метод sort() принимает замыкание возвращающегося булева значения на которое true если LHS является «меньше», чем РИТ.

0

Для Swift 3.0 версия

 let myDictionary = ["100" : "foo", "2" : "bar"] 

    let keys = self.myDictionary.allKeys.sorted { 
       ($0 as AnyObject).compare($1 as! String, options: .numeric) == .orderedDescending 
      } 
print(keys) // ["2", "100"] 

.orderedDescending используется для сортировки массива в порядке убывания, где в качестве .orderedAscending используется для сортировки массива в порядке возрастания.

+0

Слишком громоздко: '$ 0.compare ($ 1, options: .numeric) == .orderedAscending' (а не' ..descending'). Дальше 'allKeys' не компилируется в Swift (3) – vadian

+0

Я просто скомпилировал его, и он сработал –

+0

' allKeys' - это API, который принадлежит 'NSDictionary', однако' myDictionary' - Swift' Dictionary'. – vadian