Мой NSMutableDictionary
содержит четыре NSArray
с соответствующими ключами. Эти NSArray
s имеют размер 2 и содержат 2D-координаты. Я хочу получить среди них самую общую координату. Например, если координата является общей для трех массивов, это будет мой первый выбор. Как я могу найти, что любая координата является общей для по крайней мере двух массивов?Как сравнить элементы NSArray в NSMutableDictionary?
ответ
В основном вы хотите, чтобы найти пару координат, которая имеет максимум вхождений. Итак, вы можете создать массив всех координат и найти его режим.
NSMutableArray *allCoordinates = [NSMutableArray new];
[dictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
if ([key isEqualToString:@"arrayKey1"] || [key isEqualToString:@"arrayKey2"]) {
NSArray *coordinates = (NSArray *)obj;
[coordinates enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
[allCoordinates addObject:coordinates];
}];
}
}];
Теперь, U нужно написать специальный метод, чтобы найти способ массива координат (с дополнительным условием частоты бытия> = 3).
Это рабочий пример. Я предполагаю, что ваш словарь выглядит как coordinatesDict
.
NSDictionary *coordinatesDict = @{@"first": @[@11.58, @40.20], @"second": @[@12.12, @100.12], @"third": @[@11.58, @40.20], @"fourth": @[@13.2, @14.5]};
NSCountedSet *coordinates = [NSCountedSet setWithArray:[coordinatesDict allValues]];
for (NSArray *coordinateArray in coordinates) {
NSUInteger coordinateCount = [coordinates countForObject:coordinateArray];
NSLog(@"Array %@ is included %lu times", coordinateArray, (unsigned long)coordinateCount);
if (coordinateCount >= 2) {
// You found your best coordinate
}
}
Вот код, который должен работать, используя NSCountedSet
.
В нескольких словах: Я использую NSCountedSet
, который будет работать как NSSet
, сохраняя также числа вхождений (дубликатов раз).
Затем я создаю NSArray
, сортируя значения по убыванию в соответствии с количеством вхождений.
Я написал явно сравнение «count1/count2» в случае, если вы хотите применить другое значение, если количество вхождений одинаково.
NSDictionary *allData = @{@"Key1: %@":@[@(0.0), @(0.1)],
@"Key2: %@":@[@(0.1), @(0.1)],
@"Key3: %@":@[@(0.2), @(0.1)],
@"Key4: %@":@[@(0.1), @(0.1)]};
NSCountedSet *countedSet = [[NSCountedSet alloc] initWithArray:[allData allValues]];
for (NSArray *array in countedSet)
NSLog(@"For %@ counted %@ time(s)", array, @([countedSet countForObject:array]));
NSArray *sortedCountedSetArray = [[countedSet allObjects] sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2)
{
NSUInteger count1 = [countedSet countForObject:obj1];
NSUInteger count2 = [countedSet countForObject:obj2];
if (count1 < count2)
return NSOrderedDescending;
if (count1 > count2)
return NSOrderedAscending;
else
return NSOrderedSame; //May want to do additionaly thing (for example if coordinate is closer to actual position, etc.)
}];
NSLog(@"sortedCountedSetArray: %@", sortedCountedSetArray);
NSArray *bestOption = [sortedCountedSetArray firstObject]; //Coordinates the most "popular"
NSLog(@"BestOption: %@", bestOption);
Выходы:
> For (
"0.1",
"0.1"
) counted 2 time(s)
> For (
"0.2",
"0.1"
) counted 1 time(s)
> For (
0,
"0.1"
) counted 1 time(s)
> sortedCountedSetArray: (
(
"0.1",
"0.1"
),
(
"0.2",
"0.1"
),
(
0,
"0.1"
)
)
> BestOption: (
"0.1",
"0.1"
)
- 1. NSArray в NSMutableDictionary
- 2. Группировка элементов NSArray в NSMutableDictionary
- 3. Присвоение NSMutabledictionary NSArray
- 4. Сортировать NSArray от других NSMutableDictionary
- 5. Сравнение значений NSArray с NSMutableDictionary
- 6. Как добавить к NSMutableDictionary внутри NSArray?
- 7. Утечка памяти в NSMutableDictionary, NSArray в NSXMLParser
- 8. Самый простой способ превратить NSMutableDictionary в NSArray
- 9. NSMutableDictionary взяв в качестве значения NSArray
- 10. IOS Сравнить 2 NSArray
- 11. Стопорные элементы в NSArray
- 12. Как добавить objectAtIndex: Я из NSArray в NSMutableDictionary
- 13. Как добавить объект NSArray, который находится внутри свойства NSMutableDictionary и NSArray?
- 14. Как получить элементы из NSArray
- 15. Как получить доступ `NSArray` элементы
- 16. Элементы добавления NSArray
- 17. Как сравнить элементы ArrayList
- 18. Почему NSArray из NSStrings работает как ключ для NSMutableDictionary?
- 19. Как сравнить элементы массива
- 20. Как сравнить элементы в списке
- 21. Как сравнить элементы в массиве?
- 22. Как сравнить элементы в динамике
- 23. Как сравнить элементы цикла?
- 24. как сравнить элементы массива
- 25. Как сравнить элементы массива
- 26. Добавление строки Элементы в NSArray
- 27. Как сравнить значение NSString с ключом NSMutableDictionary в iPhone?
- 28. Не удается получить элементы из подкаталога NSMutableDictionary
- 29. Сравнить элементы в векторах
- 30. iPhone на Android NSMutableDictionary NSArray в HashMap ArrayList
Имеет ли каждый NSArray две 2D-координаты или элементы 'double', представляющие широту и долготу? – Dennis
Возможно, вас заинтересует 'NSCountedSet'. – Larme
@Dennis Каждый NSArray содержит одну двумерную координату (X, Y) любой точки. Мне нужно выбрать наиболее благоприятную координацию среди четырех из них. Если какая-либо из координат будет распространена в двух или трех массивах, это будет мой благоприятный вариант, если не тогда, мне придется сканировать новые наборы данных. – Raja