gpt4 book ai didi

ios - 集合枚举按顺序搜索字符串

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:06:29 25 4
gpt4 key购买 nike

我有一个包含 500 个字符串 (NSString) 的数组,每个字符串只代表一个字符(例如:@"H"),我将从头到尾循环结束。

在这些字符串中,例如有@"H"@"e"@"l"@"l", @"o".

它们肯定在数组中,但顺序未知。

我想从头到尾遍历数组并打印出来“你好”没有重复。就一次。字符串 @"H" 必须先出现在 "ello"之前。

因此,当第一个 @"H" 出现时,我会开始寻找其余的“ello”并将它们打印出来。

在过去的一个小时里一直在考虑这个问题,不幸的是我什么也想不出来,除了:

也许有一些条件,例如 NSPredicate 等,我可以在循环发生之前首先按顺序找到这些字符串的索引号。因此,我可以将它们打印出来,而不必在遍历数组时进行检查,从而使用一堆 if-else

例如:

NSArray *indexesThatMatchTheStrings = [......(condition => @"H", @"e", @"l", @"l", @"o").....]'

indexesThatMatchTheStrings 将包含匹配的索引。如果不满足条件,那么我会事先知道我不必将它们打印出来。同样,“H”、“e”、“l”、“l”、“o”在数组中,但顺序很重要。

集合中有这样的操作吗?我对任何类型的集合和算法都持开放态度(即 NSSetNSArrayNSDictionary 等)。甚至 C 中的方法(移位、结构、内存比较等)。有些东西又快又轻。

附录:

概括一下用例:

框架有没有提供什么方式或者方法可以给数组、字典、集合等集合设置一个测试条件,根据这些判断是否有东西在里面一个特定的条件(在我这里的例子中:h e l l o 序列),以便我们可以最小化循环 + 比较开销?或者甚至完全避免循环+搜索的需要,因为我们知道集合不满足搜索条件?

最佳答案

这是我的版本:

NSArray * allChars = @[@"l", @"A", @"B", @"H", @"b", @"e", @"H", @"c", @"c", @"l", @"b", @"q", @"l", @"l", @"l", @"z", @"o", @"H", @"e", @"l",@"l", @"o", @"l"];
NSPredicate * predicate = [NSPredicate predicateWithFormat:@"SELF in[cd] %@", @[@"H", @"e", @"l", @"o"]];
NSArray * equal = [allChars filteredArrayUsingPredicate:predicate];
NSString * sayHello = @"";

// This loop will find any sequence of Hello's characters

for (int i=0; i<equal.count; i++)
{
NSString * nextChar = equal[i];
NSString * try = [sayHello stringByAppendingString:nextChar];

if ([@"Hello" rangeOfString:try].location == 0) {
sayHello = try;
}

if ([sayHello rangeOfString:@"Hello"].location != NSNotFound) {
NSLog(@"Hello!");
break;
}
}

// This loop works if between Hello's char cannot be any other characters

sayHello = @"";

for (int i=0; i<equal.count; i++)
{
sayHello = [sayHello stringByAppendingString:equal[i]];
if ([sayHello rangeOfString:@"Hello"].location != NSNotFound) {
NSLog(@"Hello!");
break;
}
}

return YES;

编辑:感谢@melvas's写正则表达式的,我用 NSRegularExpression 做了同样的事情,没有循环:

    NSString * possibleHello = [equal componentsJoinedByString:@""];    
NSString * regex = @"(?=(h|H))(.*?)(?=(e|E))(.*?)(?<=(l|L))(.*?)(?=(l|L))(.*?)(?=(o|O))";

NSError * error = nil;
NSRegularExpression * regularExp = [NSRegularExpression regularExpressionWithPattern:regex
options:NSRegularExpressionDotMatchesLineSeparators
error:&error];
NSArray * matches = [regularExp matchesInString:possibleHello
options:NSMatchingReportProgress
range:NSMakeRange(0, posibleHello.length)];
if (matches.count) {
NSLog(@"Hello!");
}

关于ios - 集合枚举按顺序搜索字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21837255/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com