【问题标题】:Can't store all data from NSArray into NSMutableDictionary? [closed]无法将 NSArray 中的所有数据存储到 NSMutableDictionary 中? [关闭]
【发布时间】:2013-09-04 23:36:11
【问题描述】:

这段代码有什么问题??我正在尝试将数据从 NSArray 放入 NSMutableDictionary,但我不想先将初始 nsarray 分成两部分,然后将数据发送到 nsdcitionary。

问题是,当我 NSLog de mutabledictionary 时,它只返回 1 项,恰好是 NSArray 中的最后一个数据。

 NSString *str = @"13:00,2.00,13:05,2.03,13:10,2.07,13:15,2.01,13:20,2.08,13:25,2.10,13:30,2.15";
NSArray *arrayFinal = [str componentsSeparatedByString:@","];

 NSMutableDictionary *dict = [NSMutableDictionary new];
for (int i = 0; i < [arrayFinal count ]; i = i + 2) {
    [dict setObject:[arrayFinal objectAtIndex:i] forKey:@"hora"];
    [dict setObject:[arrayFinal objectAtIndex:i+1] forKey:@"preco"];

}

结果是:

2013-09-04 20:27:33.732 separa[1438:c07] {
hora = "13:30";
preco = "2.15";
}

任何帮助将不胜感激。

【问题讨论】:

  • 你在做什么没有意义。您正试图一遍又一遍地重用相同的密钥。你的目标是什么?你真的想要一个字典数组吗?
  • 我想将数组中的数据放入字典中。字典应该有键:'hora' 和 'preco'。 hora 将小时数存储在数组中,preco 将价格存储在数组中。
  • 所以无论是数组字典还是字典数组,您都可以选择。
  • 所以你想让“hora”键指向一个小时数组,对吗?
  • 是的 rmaddy。存储在数组中的每个小时都应该在附加到“hora”键的字典中。价格也是如此。

标签: ios objective-c nsarray nsmutabledictionary


【解决方案1】:
for (int i = 0; i < [arrayFinal count ]; i = i + 2) {
    [dict setObject:[arrayFinal objectAtIndex:i+1] forKey:[arrayFinal objectAtIndex:i]];
}

【讨论】:

  • 完美热舔!!!这正是我想要的!!!!!!
  • @MarcoAlmeida 伙计,你应该更好地表达自己。这不是你告诉 rmaddy 的。您说您希望 hora 成为键,现在键是 hora 的实际值而不是字符串 @"hora"。
  • @JuanCatalan - 有时,在现实世界中,您必须超越“规范”才能了解什么是有意义的。
  • @HotLicks 同意,但其他人的回答比这个答案(基于问题和发布的代码)更有意义(如果不是更多的话)。仅仅因为 OP 提出了一个措辞不佳的问题,并没有理由拒绝其他答案。
  • @HotLicks 我同意您给出的答案更有意义,但是 OP 回答了具有不同要求的 rmaddy 的问题,这就是为什么他发布了不同的答案,试图满足 OP 要求。没有试图给出更好的答案。然而,在这个社区中拥有不同意见是很好的。
【解决方案2】:

您需要每个键指向一个值数组。像这样的:

NSString *str = @"13:00,2.00,13:05,2.03,13:10,2.07,13:15,2.01,13:20,2.08,13:25,2.10,13:30,2.15";
NSArray *arrayFinal = [str componentsSeparatedByString:@","];

NSMutableArray *horas = [NSMutableArray new];
NSMutableArray *precos = [NSMutableArray new];
for (int i = 0; i < [arrayFinal count]; i += 2) {
    [horas addObject:arrayFinal[i]];
    [precos addObject:arrayFinal[i + 1]];
}

NSMutableDictionary *dict = [NSMutableDictionary new];
dict[@"hora"] = horas;
dict[@"preco"] = precos;

【讨论】:

  • 为什么这被否决了?
【解决方案3】:

您需要将这两个(小时数和价格)分开到它们自己的 NSMutableArrays 中,然后将每个数组存储为键之一,如下所示:

NSMutableArray *hora = [NSMutableArray alloc] init];
NSMutableArray *preco = [NSMutableArray alloc] init];

NSString *str = @"13:00,2.00,13:05,2.03,13:10,2.07,13:15,2.01,13:20,2.08,13:25,2.10,13:30,2.15";
NSArray *arrayFinal = [str componentsSeparatedByString:@","];

NSMutableDictionary *dict = [NSMutableDictionary alloc] init];
for (int i = 0; i < [arrayFinal count ]; i = i + 2) 
{
    [hora addObject:[arrayFinal objectAtIndex:i];
    [preco addObject:[arrayFinal objectAtIndex:i+1];
}

[dict setObject:hora forKey:@"hora"];
[dict setObject:preco forKey:@"preco"];

可能不完全是我这样做的方式,但我认为这是您正在寻找的概念。

【讨论】:

  • 你知道你复制了我的答案吗?
  • 你会怎么做正则表达式?
  • 对不起,rmaddy。你在我打字的时候发布了你的。我对积分没什么意见,所以 Marco 应该接受你的。
猜你喜欢
  • 2011-09-29
  • 2018-06-18
  • 1970-01-01
  • 1970-01-01
  • 2020-06-23
  • 1970-01-01
  • 2012-11-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多