NSPredicate для фильтрации массива слов в массив букв - PullRequest
0 голосов
/ 20 июля 2010

Я пытаюсь составить «взвешенный» список букв по мере создания слов. У меня есть огромный список слов в NSArray. Например, я пытаюсь получить новый NSArray, заполненный только 3-мя буквами всех слов на основе первых двух введенных букв.

Пока у меня есть ...

NSArray *filteredArray;
if (currentWordSize == 0) {
    filteredArray = wordDictionary
}
else {
    NSPredicate *filter = [NSPredicate predicateWithFormat:@"SELF beginswith[cd] %@", filterString];
    filteredArray = [wordDictionary filteredArrayUsingPredicate:filter];
}

И это хорошо работает для помещения целых слов в отфильтрованный массив, но это не совсем то, что мне нужно. Может кто-нибудь показать мне способ просто заполнить filteredArray только 1-й, 2-й или 3-й случайной буквой NSString из wordDictionary?

РЕДАКТИРОВАТЬ: разъяснил мой вопрос.

1 Ответ

2 голосов
/ 21 июля 2010

NSPredicate не то, что вы собираетесь использовать для этого. NSPredicate просто оценивает объекты на основе одного или нескольких критериев и возвращает результат «да / нет», поэтому его нельзя использовать для действий, которые фактически манипулируют проверяемыми элементами.

Чтобы получить третью букву каждой строки в массиве и поместить результаты в новый массив, это будет выглядеть примерно так:

NSArray* wordDictionary;
NSMutableArray* filteredArray = [[NSMutableArray alloc] init];

for (NSString* aString in wordDictionary)
{
    if ([aString length] > 2)
        [filteredArray addObject:[aString substringWithRange:NSMakeRange(2, 1)]];
    else
        [filteredArray addObject:@""]; //there is no third letter
}
...