我是iOS开发的新手,我遇到的问题是我不知道如何解决它...
我有JSON:
{
"038b7af5-2874-448b-88c3-f667908723d8" = {
Name = "Coffee";
Quantity = 5;
};
"4d63daaf-962b-4382-a90e-dd4db0ce052e" = {
Name = "Water";
Quantity = 1;
};
"693a6897-4250-4eef-8164-3bb1812315fc" = {
Name = "Fruit frappe";
Quantity = 1;
};
"778a66df-a2ec-419f-b9dc-94e0c0fef40d" = {
Name = "Fruit nes frappe";
Quantity = 1;
};
}
我想要做的是按UITableViewController
按数量对它们进行排序。我试过NSSortDescriptor
但没有成功......
提前致谢,
斯蒂芬
答案 0 :(得分:3)
词典是无序的集合类型。
要订购tableview,您需要使用字典键的附加数组(可以订购)。
因此,要填充tableview的项0
,您将从索引0
的数组中获取密钥,然后使用该密钥从字典条目中获取列值。
为了按Quanitity
对此数组进行排序,请执行以下操作:
@property (readonly) NSMutableArray *arrayIndex;
@property (readonly) NSMutableDictionary *dataDict;
...
[arrayIndex sortUsingComparator:^NSComparisonResult(NSString *keyA, NSString *keyB) {
NSDictionary *dictA = _dataDict[keyA];
NSNumber *quantityA = dictA["Quantity"];
NSDictionary *dictB = _dataDict[keyB];
NSNumber *quantityB = dictB["Quantity"];
if (quantityA.integerValue > quantityB.integerValue)
return NSOrderedDescending;
else if (quantityA.integerValue < quantityB.integerValue)
return NSOrderedAscending;
return NSOrderedSame;
}];
免费提示:如果可以避免,请不要将数据存储在词典中;而是将字典尽快转换为自定义对象,因为自定义对象为代码带来了如此多的强大功能和灵活性,并且看看我只需编写多少代码来制作比较器。