在迭代NSMutableArray时修改对象

时间:2014-03-17 15:43:04

标签: objective-c

我试图在迭代它时修改一个数组中的对象而无法找到一个很好的方法...这就是我所做的,是否有一种更简单的方法这个?我一直在谷歌搜索,但我找不到任何东西......

NSMutableArray *tempArray = [[NSMutableArray alloc]init];
NSArray *days = [restaurant.hours componentsSeparatedByString:@","];
for (NSString *day in days) {
      NSString *dayWithOutSpace = [day stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
      [tempArray addObject:dayWithOutSpace];
}
days = [NSArray arrayWithArray:tempArray];

谢谢!

4 个答案:

答案 0 :(得分:2)

正如其他人所建议的,可能有更好的方法来完成问题中的确切任务,但作为一般模式,您的方法没有任何问题 - 构建一个新数组。

但是如果你需要修改一个可变数组,比如因为多个对象引用它,那么它也没有任何问题 - 这就是为什么它毕竟是可变的!你只需要使用标准迭代而不是枚举 - 后者只是工作的错误工具。 E.g:

NSMutableArray *anArray = ...

NSUInteger itemCount = [anArray count];
for(NSUInteger ix = 0; ix < itemCount; ix++)
{
   // read from anArray[ix] and store into anArray[ix] as required
}

答案 1 :(得分:1)

你这样做是可以的,因为你没有修改你正在循环的数组。

这是另一种方式,不太直观,可能不会更快:

NSArray* days = [[[restaurant.hours componentsSeparatedByString:@" "] componentsJoinedByString:@""] componentsSeparatedByString:@","];

答案 2 :(得分:0)

考虑到您的小时字符串如:2,5,6,7等,您可以直接将字符串用作@", "

NSArray *days = [restaurant.hours componentsSeparatedByString:@", "];

答案 3 :(得分:0)

在分离之前消除所有空白区域可能更好。

NSString *daysWithOutSpaces = [restaurant.hours stringByReplacingOccurrencesOfString:@"[\\s\\n]" withString:@"" options:NSRegularExpressionSearch range:NSMakeRange(0, restaurant.hours.length)];
NSArray *days = [daysWithOutSpaces componentsSeparatedByString:@","];