【问题标题】:Make An Array Of Strings制作一个字符串数组
【发布时间】:2014-03-16 13:41:37
【问题描述】:

我的搜索谓词中使用了一堆字符串——我想将它们放入一个数组并搜索数组,而不是单独搜索它们,因为单独搜索它们是 SLOW

现在这就是我的字符串的设置方式

- (NSString *)searchableStringValue {
    NSCharacterSet *invalidSet = [NSCharacterSet characterSetWithCharactersInString:@"1234 "];
    NSString *searchString = [[pro componentsSeparatedByCharactersInSet:invalidSet] componentsJoinedByString:@""];
    return searchString;
}

- (NSString *)searchableStringValueTwo {
    NSCharacterSet *invalidSet = [NSCharacterSet characterSetWithCharactersInString:@"ȵ"];
    NSString *searchString = [[pro componentsSeparatedByCharactersInSet:invalidSet] componentsJoinedByString:@"n"];
    return searchString;
}

- (NSString *)searchableStringValueThree {
    NSCharacterSet *invalidSet = [NSCharacterSet characterSetWithCharactersInString:@"ŋ"];
    NSString *searchString = [[pro componentsSeparatedByCharactersInSet:invalidSet] componentsJoinedByString:@"ng"];
    return searchString;
}

- (NSString *)searchableStringValueFour {
    NSCharacterSet *invalidSet = [NSCharacterSet characterSetWithCharactersInString:@"Ẓ"];
    NSString *searchString = [[pro componentsSeparatedByCharactersInSet:invalidSet] componentsJoinedByString:@"r"];
    return searchString;
}

- (NSString *)searchableStringValueFive {
    NSCharacterSet *invalidSet = [NSCharacterSet characterSetWithCharactersInString:@"v"];
    NSString *searchString = [[pro componentsSeparatedByCharactersInSet:invalidSet] componentsJoinedByString:@"w"];
    return searchString;
}

- (NSString *)searchableStringValueSix {
    NSCharacterSet *invalidSet = [NSCharacterSet characterSetWithCharactersInString:@"1234"];
    NSString *searchString = [[pro componentsSeparatedByCharactersInSet:invalidSet] componentsJoinedByString:@""];
    return searchString;
}

- (NSString *)searchableStringValueSeven {
    NSCharacterSet *invalidSet = [NSCharacterSet characterSetWithCharactersInString:@" "];
    NSString *searchString = [[pro componentsSeparatedByCharactersInSet:invalidSet] componentsJoinedByString:@""];
    return searchString;
}

所以我想问将这些家伙放入数组的最佳方法是什么? 这甚至是最好的事情吗?!还是我只是愚蠢?有没有更好的方法来做到这一点?!

编辑:

搜索过滤器:

- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{
    NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"(head beginswith[c] %@) OR (pro beginswith[c] %@ OR (searchableStringValue beginswith[c] %@) OR (searchableStringValueTwo beginswith[c] %@) OR (searchableStringValueThree beginswith[c] %@) OR (searchableStringValueFour beginswith[c] %@) OR (searchableStringValueFive beginswith[c] %@) OR (searchableStringValueSix beginswith[c] %@) OR (searchableStringValueSeven beginswith[c] %@))", searchText, searchText, searchText, searchText, searchText, searchText, searchText, searchText, searchText];
    searchResults = [cdh filteredArrayUsingPredicate:resultPredicate];
}

【问题讨论】:

  • 什么是pro?什么是慢?您多久调用一次这些方法而不是使用结果?
  • Pro 是我称之为 Words 的类中的一个对象。我更新了上面的问题以包括我的搜索谓词——它显示了我在哪里使用字符串。当使用搜索栏+搜索栏显示控制器输入条目时,键盘变得非常非常慢;即,如果我输入“b”,则 b 键将在按下约 4 秒后进行动画处理,然后最小化让我输入下一个字母。我只是打电话给他们以获得结果。
  • 创建一个数组,将对象放入数组中。可能最简单的是 NSMutableArray。阅读有关 NSArray 和 NSMutableArray 的 Apple 规范(了解 NSMutableArray 也实现了 NSArray 的所有方法)。
  • 你不能用所有不同的替换从pro 创建一个字符串吗?
  • @Wain 工作...似乎还是有点慢...有没有办法让它snappier 一点。不管怎样,你回答了我的问题——添加一个答案,我会给你

标签: ios arrays string nsstring nsarray


【解决方案1】:

你不想做这么多的比较。每一个都需要一定的时间,每一个都是基于一个计算值。 pro 值在此期间是静态的,所以这一切都是白费力气。

如果可以,请在 pro 上执行所有替换并存储一个字符串以供搜索。存储字符串,不要每次都应用所有替换。当pro 更改时重新创建此搜索字符串。

如果您不能应用所有更改并生成一个搜索字符串,则至少存储搜索字符串并仅在 pro 更改时重新创建。

【讨论】:

    猜你喜欢
    • 2017-09-25
    • 2011-07-24
    • 2022-01-17
    • 2015-09-22
    • 1970-01-01
    • 1970-01-01
    • 2015-08-22
    • 1970-01-01
    相关资源
    最近更新 更多