Я сортирую массив. В массиве есть три типа элементов. 1. признакам 2. органические и 3. заявлены.Удалите элементы массива и добавьте их с тем же индексом iOS
Среди них я хочу сортировать только органические элементы и хранить признанные и заявленные элементы по их собственному индексу.
Ниже приведен мой код, в котором я извлекаю заявленные и признанные индексы в словаре как ключ, являющийся индексом, а значение является элементом массива.
//Initialization
NSMutableArray *sortedArray = nil;
NSMutableDictionary *tempFeaturedDictionary = [[NSMutableDictionary alloc]init];
NSMutableDictionary *tempClaimedDictionary = [[NSMutableDictionary alloc]init];
NSMutableArray *tempOrganicArray = [[NSMutableArray alloc]init];
for (int i = 0; i < array.count; i++) {
DRListing *isFeaturedObj = (DRListing*)[array objectAtIndex:i];
if (isFeaturedObj.featured) {
[tempFeaturedDictionary setObject:isFeaturedObj forKey:[@(i)stringValue]];
}else if (isFeaturedObj.claimed)
{
[tempClaimedDictionary setObject:isFeaturedObj forKey:[@(i)stringValue]];
}else
[tempOrganicArray addObject:isFeaturedObj];
}
Опять я добавляю заявленные и признаки обратно к своим первоначальным показателям после сортировки, как:
sortedArray = [NSMutableArray arrayWithArray:[tempOrganicArray sortedArrayUsingDescriptors:sortDescriptorsArray]];
for (int i = 0; i<sortedArray.count; i++) {
for (NSString *key in tempFeaturedDictionary) {
if ([[@(i)stringValue] isEqualToString: key]) {
[sortedArray insertObject:[tempFeaturedDictionary objectForKey:[@(i)stringValue]] atIndex:i];
}}
for (NSString *key in tempClaimedDictionary) {
if ([[@(i)stringValue]isEqualToString:key ]) {
[sortedArray insertObject:[tempClaimedDictionary objectForKey:[@(i)stringValue]] atIndex:i];
}
}
}
кода работает хорошо. За исключением заявленных/(и) признанных элементов в последнем индексе «массива». Поскольку в этом сценарии индекс sortedArray остается меньше, чем «array.count». Спасибо заранее.
Update -
Я получаю массив ответов типа:
[{featured1 featured2}, {organic1, organic2..}, {claimed1}, {featured11, featured12}, {organic11, organic12..}, {claimed2}, ..]
, и я имею право сортировать только органические элементы в этом массиве. Избранные и заявленные не должны потерять свою исходную позицию индекса.
Что произойдет, если ваш sortedArray содержит, скажем, 3 органических элемента, но первый признанный элемент был в первом индексе 2? В этом случае отсортированный массив уже имеет объект с индексом 2, когда вы пытаетесь добавить элемент с атрибутом по старому индексу – LoVo
. Рассмотрим, что сначала есть 2 элемента, 5 органических в середине и 1 признанный & 1 заявленный наконец. Затем sortedArray после сортировки получает 5 органических. После последнего цикла я получаю только 7 (2featured + 5organic). для выключения цикла после добавления первых двух элементов, потому что sortedArray.count
Vin