目标C:根据值从第一个数组创建数组

时间:2010-05-04 16:39:08

标签: iphone objective-c arrays string

我有一个以逗号分隔的字符串数组,例如:

Steve Jobs,12,CA
Fake Name,21,CA
Test Name,22,CA
Bill Gates,44,WA
Bill Nye,21,OR

我在NSScanner对象中有这些值,这样我就可以遍历这些值并使用objectAtIndex获取每个逗号分隔值。

所以,我想做的是,根据一个值(在本例中为State)将数组项分组为新数组。所以,从那些,我需要循环,检查它们所处的状态,并将它们推入一个新的数组,每个状态一个数组。

CA Array:
Steve Jobs,12,CA
Fake Name,21,CA
Test Name,22,CA

WA Array:
Bill Gates,44,WA

OR Array:
Bill Nye,21,OR

所以最后,我会有3个新数组,每个状态一个。此外,如果第一个数组中使用了其他状态,那么也应该创建新的数组。

任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:2)

您可以使用NSMutableDictionary NSMutableArray s - 如果遇到的状态尚未出现在字典中,请添加新数组。

NSMutableArray* arr = [states objectForKey:state];
if (arr == nil) {
    arr = [NSMutableArray array];
    [states setObject:arr forKey:state];
}

然后你可以在数组中插入值,最好是作为对象,尽管Dave DeLong提到。

答案 1 :(得分:1)

您不应将此数据维护为CSV格式。如果您需要以编程方式操作此数据(例如您正在尝试执行的操作),那就要求一个受伤的世界。

您可以使用NSArray * portions = [line componentsSeparatedByString:@","];天真地将此数据分解为数组。然后创建一个自定义对象来存储每个部分(例如,参见this post),然后您可以毫不费力地操作这些对象。

答案 2 :(得分:0)

天真:(假设字符串数组称为字符串)

NSMutableDictionary *states = [NSMutableDictionary dictionary];
for (NSString *string in strings) {
  NSString *state = [[string componentsSeparatedByString:@", "] lastObject];  
  NSMutableArray *values = [states objectForKey:state];
  if (values == nil) {
     values = [NSMutableArray array];
     [states setObject:value forKey:state];
  }
  [values addObject:string];
}

关于这一点的事情 - 首先,我不在我的电脑上,所以很有可能出现错别字和/或我错过的事情。其次,您可能希望调整由字符串行分隔的组件以更好地处理空白。