2015-05-04 6 views
3

У меня есть словарь, например <String,Loto>, а Loto - объект, как показано ниже;Swift Sort Dictionary по свойству объекта

Loto: 
{ 
    "success": true, 
    "data": { 
    "oid": "64kbbqi8dbxygb00", 
    "hafta": 961, 
    "buyukIkramiyeKazananIl": "", 
    "cekilisTarihi": "11/04/2015", 
    "cekilisTuru": "SAYISAL_LOTO", 
    "rakamlar": "03#02#48#16#15#08", 
    "rakamlarNumaraSirasi": "02 - 03 - 08 - 15 - 16 - 48", 
    "devretti": false, 
    "devirSayisi": 0, 
    "bilenKisiler": [ 
    { 
    "oid": "64kbbxi8dbxyg403", 
    "kisiBasinaDusenIkramiye": 7.35, 
    "kisiSayisi": 185712, 
    "tur": "$3_BILEN" 
    }, 
    { 
    "oid": "64kbbxi8dbxyg402", 
    "kisiBasinaDusenIkramiye": 53.05, 
    "kisiSayisi": 9146, 
    "tur": "$4_BILEN" 
    }, 
    { 
    "oid": "64kbbxi8dbxyg401", 
    "kisiBasinaDusenIkramiye": 4532.2, 
    "kisiSayisi": 142, 
    "tur": "$5_BILEN" 
    }, 
    { 
    "oid": "64kbbxi8dbxyg400", 
    "kisiBasinaDusenIkramiye": 1528438.75, 
    "kisiSayisi": 1, 
    "tur": "$6_BILEN" 
    } 
    ], 
    "buyukIkrKazananIlIlceler": [ 
    { 
    "il": "10", 
    "ilView": "BALIKESÄ°R", 
    "ilce": "01001", 
    "ilceView": "AYVALIK" 
    } 
    ], 
    "kibrisHasilati": 51127, 
    "devirTutari": 0.09, 
    "kolonSayisi": 10537872, 
    "kdv": 1599672.97, 
    "toplamHasilat": 10537872, 
    "hasilat": 8938199.03, 
    "sov": 893819.9, 
    "ikramiyeEH": 8044379.129999999, 
    "buyukIkramiye": 1528432.03, 
    "haftayaDevredenTutar": 0 
    } 
    } 

Так мой словарь, как < «11042015», лото> и я хочу, чтобы отсортировать этот словарь по недвижимости «Хафта» объекта лото.

Как я могу это сделать? Пожалуйста, помогите мне!

+0

Это все данные или образец? –

+0

Словари не заказываются, однако вы могли бы взглянуть на этот учебник по созданию собственного упорядоченного словаря: http://timekl.com/blog/2014/06/02/learning-swift-ordered-dictionaries/ – ABakerSmith

+0

@ malav-soni - пример данных. В моем словаре есть элемент 964, например <11042015 ", Loto>. Таким образом, ключевым является строковое значение - объект лото. И я хочу сортировать bye свойство «hafta» объекта ob Loto. –

ответ

1

Вы не можете. Клавиши словаря не сортируются. Вы можете получить массив значений и отсортировать этот массив.

+0

На самом деле я пробовал это, но я не мог сортировать. Может быть, я сделал что-то не так. Я еще раз проверю. –

3

Словари не упорядочены. Вам нужно преобразовать его в массив, а затем отсортировать. Так что-то вроде этого.

let lotoArray = lotoDictionary.allObjects as [Loto] 

lotoArray.sort { $0.hafta < $1.hafta } 
+0

Это именно то, что предложил Амин Негм-Авад перед вами. Словари по умолчанию не сортируются. –

+0

Спасибо за ваш ответ. Я попробую это. –

+0

Не нужно сначала преобразовывать в массив, так как вы можете сортировать 'dict.values' напрямую. –

7

Если Loto является объектом с hafta собственности, вы можете отсортировать словарь, передав его в функцию sorted, наряду с закрытием, который говорит ему, как заказать записи:

sorted(dict) { $0.1.hafta < $1.1.hafta } 

($0.1 и $1.1, потому что словари представляют в виде последовательности пар ключ/значение - вы хотите отсортировать по свойству значение, т.е. запись кортежа 1)

Примечание, это вернет вам отсортированный массив типа [(String,Loto)], а не словарь (так как словари Swift неупорядочены).

(если Loto на самом деле не объект, а скорее другой словарь, вам может потребоваться {$0.1["hafta"] < $1.1["hafta"]} - это действительно зависит от того, как вы держите свои данные - хорошая новость: вам не нужно беспокоиться о дополнительных, так как они могут быть сопоставлены с <)

Если вам не нужны ключи, просто сортировать значения:

sorted(dict.values) { $0.hafta < $1.hafta } 

который даст вам обратно отсортированный массив типа [Loto]

+0

Этот ответ должен быть принят. Спасибо, это помогло мне. – sudo

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