在目标c中创建字典数组

时间:2014-09-13 11:54:25

标签: objective-c nsmutablearray nsarray nsdictionary nsmutabledictionary

我从本地数据库中获取字典。 名为 aryTitle_DB 结构的数据库阵列如下所述。

  

({           “日期”:13/9/2014;   “标题”= “ABC”   },{“date”:2014/9/9;   “title”=“def”},{“date”:2014/9/9;   “title”=“ghi”},{“date”:14/9/2014;   “title”=“abc”},{“date”:15/9/2014;   “title”=“abc”},{“date”:15/9/2014;   “title”=“def”})

我需要来自 aryTitle_DB

的以下类型的数组结构
  

({“13/9/2014”:(“abc”,“def”,“ghi”)},{“14/9/2014”:(“abc”)},{“15/9 / 2014“:(”abc“,”def“)})

我在堆栈溢出和其他教程中进行了大量搜索,但无法找到它。 请帮助创建这种阵列结构。 帮助将是值得的。

2 个答案:

答案 0 :(得分:0)

在Objective-C中,没有泛型,实际上只有Swing才能到达。 因此,您的数据结构只是NSArray的经典NSDictionary

如果你想在objC中声明这个( { "13/9/2014":("abc","def","ghi") }, { "14/9/2014":("abc") }, { "15/9/2014":("abc","def") } ),你可以这样做

NSMutableArray* result = [NSMutableArray new];
NSDictionary * dict = [NSDictionary new];
// With Modern objective C syntax, it would be like that :
dict["13/9/2014"] = @{"abc","def","ghi"};
dict["14/9/2014"] = @{"abc"};
dict["15/9/2014"] = @{"abc","def"};

[result addObject:dict];

但是,您当然可以为每个值创建中间NSMutableArray,并使用setValue:ForKey:的{​​{1}}方法将其添加到字典中。

编辑:添加算法来解析数据库答案

NSDictionary

答案 1 :(得分:0)

NSMutableArray *fromDB;
NSMutableArray *filtered;
filtered = [NSMutableArray new];
while (fromDB.count > 0){
    NSDictionary *uniqueDate;
    NSArray *filteredDate;
    NSMutableArray *newDate;
    uniqueDate = fromDB[0];
    filteredDate = [fromDB filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self.date=%K",uniqueDate[@"date"]]];
    [fromDB removeObjectsInArray:filteredDate];
    newDate = [NSMutableArray new];
    for (NSDictionary *oneDate in filteredDate) {
        [newDate addObject:oneDate[@"title"]];
    }
    uniqueDate = @{uniqueDate[@"date"]:newDate};
    [filtered addObject:uniqueDate];
};

此代码应该有效。可能是谓词的格式应该改变,因为我没有测试它。您可以使用带有填充var字段的格式化字符串代替格式。