Okey. У меня есть массив с именами песен. У меня также есть база данных CoreData с некоторыми из тех же самых песен. Как эффективно проверить, какие песни есть в обоих? Я действительно не хочу сравнивать каждую песню в базе данных со всеми элементами массива, используя цикл for. Мне также нужно знать номера элементов в массиве songnames, который находится в массиве CD. Может кто-нибудь мне помочь? Благодаря!Эффективно сравнивать элементы в массиве с строками строк coredata
ответ
Вы можете добавить два массива в два разных набора, а затем найти пересечение. Это даст вам общий объект (имена песен в вашем случае) в обоих наборах.
Пример:
NSSet *set1 = [[NSSet alloc] initWithObjects:@"one",@"two", nil];
NSSet *set2 = [[NSSet alloc] initWithObjects:@"one",@"none", nil];
NSMutableSet *set3 = [[NSMutableSet alloc] initWithSet:set1];
[set3 intersectSet:set2];
В вашем случае вы можете использовать метод initWithArray.
Есть ли способ изменить это, чтобы я мог получить элемент nr в первом массиве (большем массиве) соответствующих элементов? –
Мне это удалось немного по-другому. –
@Alex - для вашего первого комментария: да, вы можете это сделать, вызов метода пересекается в set1 для set2. пример: [set1 intersectSet set2]; просто не забудьте выделить set1 как NSMutableSet в этом случае – zahreelay
Если ваш массив имен песен является стандартным NSArray, у вас нет выбора, кроме как выполнить операцию линейного поиска (т. Е. Цикл for). Если вы используете другую структуру данных (например, отсортированный массив), вы можете немного сократить выполнение, выполнив двоичный поиск пополам вместо линейного поиска, чтобы найти совпадения.
В конце концов я решил это, используя перекресток. Zahreelay указал мне в правильном направлении, но мне нужно было сделать что-то другое с кодом, чем то, что он сделал. Если кто-то еще может выиграть от этого решения в будущем, я решил опубликовать его.
NSMutableArray *playlist = [[NSMutableArray alloc] initWithObjects:@"Walk", @"The Pretender", @"Best Of You", @"Everlong",nil];
NSMutableArray *coredataArray =[[NSMutableArray alloc] initWithObjects:@"Walk", @"Everlong",nil];
NSMutableArray *array = [[NSMutableArray alloc] init];
int tracknum = 0;
for (id obj in spilleliste) {
if ([stemmeliste containsObject:obj]) {
NSNumber *tracknumber = [NSNumber numberWithInt:tracknum];
[array addObject:tracknumber];
}
tracknum++;
}
NSLog(@"Array: %@",array);
Выход:
2012-05-11 01:08:20.154 compare[19936:207] Array : (
0,
3
)
NSArray документация имеет разделы по Querying an Array и Finding Objects in an Array. Просто используйте комбинацию containsObject:
и 'indexOfObject:
Вам все равно придется перебирать песни, возвращенные из вашей базы данных.
NSArray *fetchResults = [NSArray arrayWithObjects:@"Song1", @"Song2", @"Song3", nil];
for(id song in myArray) {
if([fetchResults containsObject:song]) {
int index = [fetchResults indexOfObject:song];
// do something with value
}
}
- 1. Как эффективно сравнивать записи в массиве numpy?
- 2. Сравнивать битовые множества эффективно
- 3. Сравнивать таблицы эффективно
- 4. Сравнивать элементы массива с другими элементами в массиве один раз
- 5. Как эффективно сравнивать два списка?
- 6. Как эффективно сравнивать объекты NSDate
- 7. Как эффективно сравнивать векторы с C++?
- 8. Сравнивать два очень больших сортированных массива эффективно
- 9. Сравнивать модель значений в двух массивах более эффективно
- 10. Как эффективно сравнивать наборы в C++?
- 11. Как эффективно сравнивать два значения SHA512Managed hash
- 12. SQL Server: сравнивать даты между строками
- 13. Как найти элементы в массиве двумерных ячеек более эффективно?
- 14. Поведение StrCmp в NSIS. Можно ли сравнивать «» с другими строками?
- 15. Проверьте элементы массива строк содержат только элементы в другом массиве
- 16. Как эффективно сравнивать элементы в двух векторах в MATLAB без использования петель?
- 17. как сравнивать и сортировать цифры в массиве
- 18. iOS - Переупорядочить элементы в CoreData
- 19. Как удалить элементы с пробелом в массиве
- 20. Как подсчитать элементы в массиве BASH?
- 21. Угловой фильтр с несколькими строками в массиве
- 22. Как работать с строками в массиве?
- 23. Сортировка строк таблицы с использованием coredata
- 24. Поиск элементов эффективно в массиве
- 25. Эффективно сравнивать каждый элемент числового вектора с предыдущим элементом
- 26. MySQL Как эффективно сравнивать несколько полей между таблицами?
- 27. Как искать и сравнивать элементы в массиве, полученном с выхода цикла после завершения цикла (javascript)
- 28. Как эффективно перечислить файлы с точно строками `n`?
- 29. Нахождения строк ломтиков в массиве строк ломтиков
- 30. Recyclerview с различными строками строк
Что плохого в отношении петли? – peko
@peko Затем мне нужно сравнить каждую строку данных ядра со всем массивом. Это не хорошее программирование. –
Да, но микро-оптимизация - это .. – peko