【发布时间】:2014-02-17 19:05:17
【问题描述】:
我有一个包含 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”,但顺序很重要。
集合中有这样的操作吗?我对任何类型的集合和算法持开放态度(即NSSet、NSArray、NSDictionary 等)。甚至C 中的方法(位移、结构、内存比较等)。有些东西又快又轻。
附录:
概括一下用例:
框架是否提供了任何方法或方法,我们可以通过这些方法或方法为数组、字典或集合等集合设置测试条件,我们可以根据这些方法来确定其中是否存在某些东西一个特定的条件(在我的例子中:h e l l o 序列),以便我们可以最小化循环+比较开销?或者甚至完全避免循环+搜索的需要,因为我们知道集合不满足搜索条件?
【问题讨论】:
-
您能否举例说明您正在从示例输入中寻找的确切输出?我可以根据您的描述想到几个场景,只是想得到您想要的。
-
让我们抽象地看待这个问题,所以我们首先找到“H”,然后我们进一步迭代找到“E”,然后是字符串的其余部分。我是否正确理解了您的问题?
-
@Putz1103 感谢您的回复。这个数组中有字符,“H”、“e”、“l”、“l”、“o”肯定在那里(每个字符在这个数组中可以有重复,但顺序未知)。我想通过使用集合中的一些快速枚举技术/方法来检查其中是否存在连续字符“H”“e”“l”“l”“o”。
-
@Basheer_CAD 你对我的理解是正确的。谢谢。
标签: ios objective-c c collections nspredicate