如何在 NSDictionary 中为键和对象添加数组

Posted

技术标签:

【中文标题】如何在 NSDictionary 中为键和对象添加数组【英文标题】:How to add arrays for key and object in NSDictionary 【发布时间】:2014-09-18 09:45:42 【问题描述】:

我有 2 个数组。 数组 A arrayA[0] 包含 a,b,c,d,e... 并且 数组 B arrayB[0] 包含 a,b,c. ..。并且两个数组都是可变的并且有很多对象。在NSMutableDictionary 中,数组 A 中的每个元素(作为键)都应该存储整个数组 B。

例如:

(key value)Array A[0] 有整个(object value)Array B(0...200)

(key value)Array A[1] 有整个(object value)Array B(0...200)

(key value)Array A[2] 有整个(object value)Array B(0...200)

我的代码:

for (int i=0; i<100; i++)


    [someDictionary setObject:arrayB forKey:arrayA[i]];


这不起作用,我也试过了:

[someDictionary initWithObjects:arrayB forKeys:arrayA[i]]

【问题讨论】:

请提供更多信息; “它不起作用”是不够的。 需要有关该错误的更多信息。我的意思是给我们看日志。 错误:由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[Channels copyWithZone:]:无法识别的选择器发送到实例 0xbd2ae20” 【参考方案1】:

您应该使用NSString 将键存储在键值对中。所以我会推荐

for (int i=0; i<100; i++) 

    NSString *str=(NSString *)arrayA[i];

    [someDictionary setObject:arrayB forKey:str];


【讨论】:

您可能有一些东西,但是将其转换为 NSString * 不会使其成为字符串。 是的,没错,但关键是我们需要字符串作为“key”。我希望你明白我的意思。 原因:'-[Channels copyWithZone:]:无法识别的选择器发送到实例 0xbd09d20' 使用 NSMutableDictionary 而不是 NSDictionary 我正在使用可变字典【参考方案2】:

您的代码原则上看起来不错。显然固定为 100 个元素并不好,所以我会写

for (id key in self.arrayA)
    [someDictionary setObject:self.arrayB forKey:key];

【讨论】:

【参考方案3】:

试试这个答案。不知道老哥我对你的问题理解对了还是错了。

试试我的代码:

NSMutableArray *tempA=[NSMutableArray array];
NSMutableArray *tempB=[NSMutableArray array];

for (int a = 0; a < 100; a++)

     [tempA addObject:[NSString stringWithFormat:@"%d",a]];


NSMutableArray *dataArray=[NSMutableArray array];
NSMutableDictionary *dict;

for (int i = 0; i < [tempA count]; i++)

        for (int a = 0; a < 100; a++)
        
            dict=[NSMutableDictionary dictionary];
            NSString*  localTemp=[NSString stringWithFormat:@"key-%@",[tempA objectAtIndex:i]];
            [tempB addObject:[NSString stringWithFormat:@"%d",a]];
            id object=[tempB objectAtIndex:a];
            [dict setObject:object forKey:localTemp];
            [dataArray addObject:dict];
        
    
    NSLog(@"Dictionary is---->%@",dataArray);

【讨论】:

tbh 我不明白这段代码是什么意思。实际上使用简单的数组它可以正常工作,但我的 arrayA[0] 有 a,b,c,d,e 而 arrayA[2] 有 a,b,c,d,e 这里a[0]、a[1]等同样的东西......将有一个完整的b数组值。 实际上我的错误在于copyWithZone,所以我正在尝试修复它【参考方案4】:
 NSArray *arrayA = [NSArray arrayWithObjects:@"1",@"2", nil];
    NSArray *arrayB = [NSArray arrayWithObjects:@"3",@"4", nil];
    NSMutableDictionary *temp = [[NSMutableDictionary alloc]init];

    for(int i =0 ; i<[arrayA count];i++)
    
        [temp setObject:arrayB forKey:[arrayA objectAtIndex:i]];
    

【讨论】:

错误:由于未捕获的异常 'NSRangeException' 导致应用程序终止,原因:'*** -[__NSArrayM objectAtIndex:]:索引 196465664 超出范围 [0 .. 298]' 这个有效。我尝试过这个。你得到什么类型的错误? @user2885077 是的,这段代码有效,但我的数组有像 arrayA[0] 包含 a,b,c,d,e 之类的对象,还有 arrayB[0] 包含 a,b,c

以上是关于如何在 NSDictionary 中为键和对象添加数组的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 中为 TTTAttributedLabel LinkAttributes 添加 NSDictionary UIColor

从 NSDictionary 到 NSString 的所有键和对象

为键和项目编写类型提示的正确方法

如何将 JSON 属性值转换为键和值数组

NSDictionary 按字母顺序排序[重复]

在 node.js 中为现有对象创建一个新的键和/或数组