2015-05-04 55 views
3

我有一个字典,如<String,Loto>和Loto是像下面的对象;斯威夫特排序字典由对象的属性值

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”,乐透>,我想解决这本词典乐透对象的“hafta”属性。

我该怎么做?请帮帮我!

+0

这是整个数据还是样本? –

+0

字典没有排序,但你可以看看这个教程创建自己的有序字典:http://timekl.com/blog/2014/06/02/learning-swift-ordered-dictionaries/ – ABakerSmith

+0

@ malav-soni这是样本数据。我的字典有像“<11042015”,Loto>的964元素。所以key是一个字符串值是loto对象。我想要再分类“hafta”属性ob Loto对象。 –

回答

1

你不能。字典的键不排序。您可以获取数组的值并对该数组进行排序。

+0

其实我试过但我无法排序。可能是我做错了什么。我会再检查一次。 –

3

字典没有排序。你需要的是将其转换为数组,然后对其进行排序。所以像这样的东西。

let lotoArray = lotoDictionary.allObjects as [Loto] 

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

这正是Amin Negm-Awad之前建议的。字典默认不排序。 –

+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