【问题标题】:how to match string portion with NSArray values in objective-c如何在objective-c中将字符串部分与NSArray值匹配
【发布时间】:2011-07-22 12:05:04
【问题描述】:

我有以下数组和搜索字符串。

NSArray *values =[NSArray arrayWithObjects:@"abc",@"xyz",@"cba",@"yzx",nil];

NSString *search = @"startcba";

我想在数组元素中搜索字符串的结尾部分。我预期的搜索结果将是@"cba"。请让我知道如何在数组中找到期望值以进行搜索。

谢谢,

【问题讨论】:

  • 总是最后三个字符?如果是,获取子字符串并发送[myArray indexOfObject:myString]
  • 对不起,它可以是任意长度,例如:NSArray *values =[NSArray arrayWithObjects:@"abc",@"xyz",@"cba",@"yzx",@"Abcd “,零]; NSString *search = @"startabcd";

标签: objective-c cocoa search nsstring nsarray


【解决方案1】:

您可以使用NSPredicate 获取满足您要求的元素。

NSPredicate * predicate = [NSPredicate predicateWithFormat:@" %@ ENDSWITH SELF ", search];
NSArray * searchResults = [values filteredArrayUsingPredicate:predicate];

【讨论】:

  • 您可以在谓词中指定cd,以实现不区分大小写和变音符号。所以,谓词格式看起来像这样@" %@ ENDSWITH[cd] SELF "
  • 感谢 Deepak 和 EmptyStack 提供简单而准确的解决方案。
【解决方案2】:

NSPredicates 方式很棒。

这是一个使用 rangeOfString 的方法:

NSArray *values =[NSArray arrayWithObjects:@"abc",@"xyz",@"cba",@"yzx",nil];

NSString *search = @"startcba";
NSUInteger searchLength = [search length];
NSString *result = nil;

for (NSString *val in values)
{
    NSUInteger valLength = [val length];
    NSRange expectedRange = NSMakeRange(searchLength - valLength, valLength);
    NSRange rng = [search rangeOfString:val];

    if ( rng.location == expectedRange.location && rng.length == expectedRange.length )
    {
        result = val;
        break;
    }
}

【讨论】:

  • 谢谢,因为您的 rangeOfString 方法与 deepak 的方法一样好,它还可以让我在同一个循环中找到项目的索引。抱歉,我必须接受 deepak 的回答,因为这正是我所需要的。感谢您的宝贵帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-28
  • 1970-01-01
  • 1970-01-01
  • 2020-05-02
  • 1970-01-01
  • 2015-12-31
相关资源
最近更新 更多