Цель C: создать массивы из первого массива на основе значения - PullRequest
2 голосов
/ 04 мая 2010

У меня есть массив строк, разделенных запятой, таких как:

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 ]

2 голосов
/ 04 мая 2010

Вы можете использовать NSMutableDictionary из NSMutableArray с - если обнаруженное состояние еще не в словаре, добавьте новый массив.

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

Затем вы можете вставить значения в массив, предпочтительно как объекты, хотя, как упоминает Дэйв Делонг.

1 голос
/ 04 мая 2010

Вы не должны поддерживать эти данные как CSV. Это требует огромного вреда, если вам когда-нибудь понадобится манипулировать этими данными программно (например, что вы пытаетесь сделать).

Вы можете наивно разбивать эти данные на массивы, используя NSArray * portions = [line componentsSeparatedByString:@","];. Затем создайте пользовательский объект для хранения каждой части (например, см. this post ), и затем вы можете управлять этими объектами практически без усилий.

0 голосов
/ 04 мая 2010

Наивно: (при условии массива строк, называемых строками)

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

Количество вещей по этому поводу - во-первых, я не за компьютером, поэтому есть большая вероятность опечаток и / или вещей, которые я пропустил. Во-вторых, вы, вероятно, захотите адаптировать компоненты, разделенные строкой, для лучшей обработки пробелов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...