iOS数量的客观排序字典

时间:2015-06-24 07:32:59

标签: ios json nssortdescriptor

我是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但没有成功...... 提前致谢, 斯蒂芬

1 个答案:

答案 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;
}];

免费提示:如果可以避免,请不要将数据存储在词典中;而是将字典尽快转换为自定义对象,因为自定义对象为代码带来了如此多的强大功能和灵活性,并且看看我只需编写多少代码来制作比较器。