[英]How to sort this NSDictionary based on its key “id” ascending order?
嗨,這是從服務器得到的
{
1 = {
"display_name" = "One";
id = 1;
};
2 = {
"display_name" = "Two";
id = 2;
};
13 = {
"display_name" = "abc";
id = 13;
};
15 = {
"display_name" = "aaa";
id = 15;
};
4 = {
"display_name" = "ffd";
id = 4;
};
3 = {
"display_name" = "abdfdfc";
id = 3;
};
5 = {
"display_name" = "aasdfsdfa";
id = 5;
};
}
我需要根據“ id”對它進行排序,這就是輸出的內容
預期產量
{
1 = {
"display_name" = "One";
id = 1;
};
2 = {
"display_name" = "Two";
id = 2;
};
3 = {
"display_name" = "abdfdfc";
id = 3;
};
4 = {
"display_name" = "ffd";
id = 4;
};
5 = {
"display_name" = "aasdfsdfa";
id = 5;
};
13 = {
"display_name" = "abc";
id = 13;
};
15 = {
"display_name" = "aaa";
id = 15;
};
}
我嘗試過此代碼,但無法正常工作
//vehiclesDictionary real dictionary
NSMutableArray *sortedKeys=[[NSMutableArray alloc]init];
for(NSString *item in [vehiclesDictionary allKeys]){
[sortedKeys addObject:[NSNumber numberWithInt:[item intValue]]];
}
NSArray *sortedKeysArray = [sortedKeys sortedArrayUsingSelector: @selector(compare:)];
NSLog(@"%@",sortedKeysArray);
NSMutableDictionary *sortedValues = [[NSMutableDictionary alloc] init];
for (NSString *key in sortedKeysArray) {
[sortedValues setValue:[vehiclesDictionary valueForKey:[NSString stringWithFormat:@"%@",key]] forKey:key];
}
NSLog(@"%@",sortedValues);
請幫助我
您不能對NSDictionary進行排序,它是未排序的集合類型。 您將需要將密鑰存儲在數組中並對其進行排序,然后使用它按順序訪問NSDictionary。
根據上面的代碼,可以對其進行如下修改,例如
NSDictionary *dict = [NSDictionary dictionary];
NSArray *sortedKeys = [[dict allKeys] sortedArrayUsingSelector:@selector(compare:)];
for (NSString *key in sortedKeys) {
NSLog(@"%@", [d objectForKey:key]);
// Do something with the object here
}
在這里,您可以使用NSDictionary傳遞sortedKeys數組,並使用sortedKeys數組按順序訪問NSDictionary。
一種更簡潔的方法來獲取數組,但具有與上述相同的結果,將使用:
NSDictionary -keysSortedByValueUsingComparator
如圖所示這里 。
正如其他人提到的, NSDictionaries
無法排序。 但是,您可以執行以下操作:
-(NSArray *)sortedKeysFromDictionary:(NSDictionary *)dictionary ascending:(BOOL)ascending
{
/* get all keys from dictionary */
NSArray *allKeys = [dictionary allKeys];
NSString *key = @"id"; // using "id" as key here
/* sort keys */
NSSortDescriptor *dateDescriptor = [NSSortDescriptor sortDescriptorWithKey:key ascending:ascending];
return [NSArray arrayWithArray:[allKeys sortedArrayUsingDescriptors:@[dateDescriptor]]];
}
這將獲取字典中的所有鍵,根據需要按升序或降序對其進行排序,並將其作為NSArray
返回。 然后可以使用此數組訪問原始字典。 示例實現如下所示:
for (NSString *key in [self sortedKeysFromDictionary:sampleDic ascending:NO])
{
/* get value from current key */
NSDictionary *currentDic = [sampleDic objectForKey:key];
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.