【问题标题】:How to search in NSArray?如何在 NSArray 中搜索?
【发布时间】:2011-11-10 17:34:38
【问题描述】:

我有一个像休耕一样的数组,

NSArray*array = [NSArray arrayWithObjects:@"1.1 something", @"1.2 something else", @"1.3 out of left field", @"1.4 yet another!", nil];

现在,我的绳子就像休闲一样,

NSString*str = @"1.3";

现在我将发送 str 。然后它需要在数组中找到该 str 并且它需要返回找到该文本的对象的索引。意味着我需要索引 2 作为输出。任何人都可以分享代码.提前致谢。

【问题讨论】:

  • 我更改了您的数据集以反映我认为您要更准确地询问的内容。您的旧数据集让人们望而却步,因为数字是字符串之间唯一不同的地方。

标签: iphone objective-c ios4 xcode4.2


【解决方案1】:

这里是一个使用块的例子,注意方法:hasPrefix:

NSArray *array = [NSArray arrayWithObjects:@"1.1 problem1", @"1.2 problem2", @"1.3 problem3", @"1.4 problem4", nil];
NSString *str = @"1.3";

NSUInteger index = [array indexOfObjectPassingTest:
                    ^(id obj, NSUInteger idx, BOOL *stop) {
                        return [obj hasPrefix:str];
                    }];

NSLog(@"index: %lu", index);

NSLog 输出:

index: 2

【讨论】:

    【解决方案2】:

    先评论,

    NSString *str = 1.3;
    

    不创建NSString 对象。你应该有

    NSString *str = @"1.3";
    

    要搜索NSArray,您必须将字符串更改为数组中的exact 字符串,或者同时搜索NSString。对于前者,只需这样做

    float num = 1.3;
    NSString *str = [NSString stringWithFormat:@"%.1f problem%d",num,(num*10)%10];
    
    [array indexOfObject:str];
    

    您也可以使用NSPredicates 来获得更好的体验。

    【讨论】:

    • 不错的一个。但是如果我发送了完整字符串,则没有直接方法 indexOfObject 。但我只会发送 1.3 。请再次阅读问题。无论如何,谢谢。
    【解决方案3】:

    试试

    NSString *searchString = [str stringByAppendingFormat: @" problem%@", [str substringFromIndex: 2]];
    NSUInteger index = [array indexOfObject: searchString];
    

    或者(因为你喜欢oneliners):

    [array indexOfObject: [[array filteredArrayUsingPredicate: [NSPredicate predicateWithFormat: @"SELF beginswith %@", str]] objectAtIndex: 0]];
    

    【讨论】:

    • 我不会改变任何东西。我有相同的数组和相同的字符串。我只会发送 1.3 yyyyyyyy。然后我想要索引。我想现在你明白了。
    【解决方案4】:

    最简单的方法是枚举数组的值并检查子字符串:

    NSArray *array = [NSArray arrayWithObjects: @"1.1 something", @"1.2 something else", @"1.3 out of left field", @"1.4 yet another!", nil];
    NSString *str = @"1.33";
    int i = -1;
    int index = -1;
    for (NSString *arrayString in array) {
        i++;
        if ([arrayString rangeOfString: str].location != NSNotFound) {
            index = i;
            break;
        }
    }
    NSLog(@"Index: %d", index);
    

    不是最佳的,但会起作用。

    【讨论】:

      猜你喜欢
      • 2014-12-27
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 2011-07-10
      • 1970-01-01
      • 2012-06-27
      • 1970-01-01
      相关资源
      最近更新 更多