我有一个nsmutablearray,我在nsarray的for循环中添加了对象。我想让它添加对象,直到它从indexAfObject中的NSNotFound
:来自NSArray。
该数组位于for循环中,用于从每个索引中提取字符串。
我的代码:
NSInteger untilNotFound = NSNotFound;
NSUInteger index = [array indexOfObject:string];
for (index; index < untilNotFound; index ++)
{
[self.mutablearray addObject:[array objectAtIndex: index]];
}
编辑:
for (string in array)
{
NSComparisonResult *result = [string compare:searchText options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch)
range:NSMakeRange(0, [searchText length])];
if (result == NSOrderedSame)
{
NSInteger index;
for (index =[array indexOfObject:string]; (index < [array count] && index < 100 && index!= NSNotFound); index ++)
{
[self.mutablearray addObject:[array objectAtIndex: index]];
}
break;
}
}
EDIT。
我以前的代码有效,它位于if(result == NSOrderedSame)里面我只是想知道是否有更好,更容易和性能友好的解决方案在它到达NSNotFound之前提取索引:
NSUInteger new = [array indexOfObject:string];
NSString *last = [array lastObject];
NSUInteger total = [array indexOfObject:last];
NSUInteger newmax = new + 10;
NSUInteger totalminus = total - 11;
if (newmax <= totalminus )
{
[self.mutablearray addObject:string];
[self.mutablearray addObject:[array objectAtIndex:new + 1]];
[self.mutablearray addObject:[array objectAtIndex:new + 2]];
[self.mutablearray addObject:[array objectAtIndex:new + 3]];
[self.mutablearray addObject:[array objectAtIndex:new + 4]];
[self.mutablearray addObject:[array objectAtIndex:new + 5]];
[self.mutablearray addObject:[array objectAtIndex:new + 6]];
[self.mutablearray addObject:[array objectAtIndex:new + 7]];
[self.mutablearray addObject:[array objectAtIndex:new + 8]];
[self.mutablearray addObject:[array objectAtIndex:new + 9]];
[self.mutablearray addObject:[array objectAtIndex:new + 10]];
}
else
{
[self.mutablearray addObject:string];
}
答案 0 :(得分:6)
这不是NSArray
或NSNotFound
的工作方式。尝试在NSArray
结束后访问对象将引发异常。有没有具体的理由为什么你想这样做?使用快速枚举要容易得多:
for (id object in array) {
[self.mutablearray addObject:object];
}
编辑:我从您的其他评论中看到,您希望将此限制为最多添加到可变数组的100个对象。这很容易:
NSUInteger count = 0;
for (id object in array) {
[self.mutablearray addObject:object];
count++;
if (count >= 100) break;
}
答案 1 :(得分:2)
看起来你正在尝试做一个累积子集。试试这个:
for(NSInteger index = [array indexOfObject: string]; ((index < [array count]) &&
(index <= 100) &&
(index != NSNotFound)) ; index++)
{
[self.mutablearray addObject: [array objectAtIndex: index]];
}
或者,如果你只是做一个严格的子集,试试这个:
NSInteger startIndex = [array indexOfObject: string];
NSInteger endIndex = MIN([array count], 100);
if(startIndex != NSNotFound)
{
self.mutablearray = [array subarrayWithRange: NSMakeRange(startIndex, endIndex)] mutableCopy];
}
答案 2 :(得分:1)
NSNotFound定义如下
enum {NSNotFound = NSIntegerMax};
所以你将要访问数组中的无效indeces。
答案 3 :(得分:0)
for (id obj in array){
[self.mutableArray addObject:obj];
}
这将一直运行,直到数组有对象。