gpt4 book ai didi

iphone - 对数组进行排序时忽略某些字符串

转载 作者:行者123 更新时间:2023-12-03 20:29:03 25 4
gpt4 key购买 nike

我正在制作一个语言应用程序,并且我有一长串与该语言相关的词汇表(德语,如果有人感兴趣的话)。我的应用程序具有在按德语单词或英语单词对表格 View 进行排序之间切换的功能。

当我使用以下内容时:

NSString *path = [[NSBundle mainBundle] pathForResource:name ofType:type];
NSString *string = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
NSArray *array = [[string componentsSeparatedByString:@"\n"] sortedArrayUsingSelector:@selector(compare:)];

它工作得绝对完美 - 我的意思是,完全符合预期。然而,我想改进的是,有些单词,例如动词或名词,前面总是有前缀,例如“to”,如“to do some”,或“the”前面名词。所以我想做的是以某种方式从我的排序中排除这些,因为否则我最终会在数组中的“t”部分下按字母顺序对所有动词进行排序,这对用户来说不太友好。

我已经浏览了有关 NSString 和 NSArray 的 Apple 文档,因为这是 compare 函数所在的位置(除非我大错特错了),而且我还没有找到任何方法我感觉合理。这是我第一次进行这样的数据处理,所以我可能会错过一些简单的东西,所以我非常感谢一些帮助。

非常感谢

迈克尔jvdw

最佳答案

你走在正确的道路上。您想要使用的而不是(内置)compare 方法是编写自己的方法,该方法可以消除“to”或“the”位(如果存在),然后使用现有的比较方法。

您的调用将如下所示:

NSArray *array = [[string componentsSeparatedByString:@"\n"] sortedArrayUsingSelector:@selector(myCompare:)];

通过以下方法使用您为 NSString 提供的自定义类别:

// This method can be exposed in a header
- (NSComparisonResult)myCompare:(NSString*)aString
{
NSString* selfTrimmed = [self removeArticles];
NSString* aStringTrimmed = [s2 removeArticles];
return [self compare:aString];
}

// This method can be kept private in the .m implementation
- (NSString*)removeArticles
{
NSRange range = NSMakeRange(NSNotFound, 0);
if ([self hasPrefix:@"to "])
{
range = [self rangeOfString:@"to "];
}
else if ([self hasPrefix:@"the "])
{
range = [self rangeOfString:@"the "];
}

if (range.location != NSNotFound)
{
return [self substringFromIndex:range.length];
}
else
{
return self;
}
}

关于iphone - 对数组进行排序时忽略某些字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4364056/

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