2013-11-09 4 views
0

У меня есть массив из plist, и каждое значение содержит ключ и строку и вторичный массив, который я получаю из json-файла в Интернете. Я хочу заказать вторичный массив на основе ключей в первом массиве.Сортировка массива на основе порядка второго массива

Я хочу, чтобы достичь чего-то вроде этого:

array1: Item0 - EUR - Строка Элемент1 - USD - Строка Элемент2 - AUD - Строка и т.д.

array2: Item0 - AUD - 123.242 Пункт 1 - EUR - 535.123 Пункт2 - USD - 325,646 и т. Д.

У меня такой же ключевой индекс для обоих, но я хочу получить значение для индекса ключа из массива2 на основе порядка ключевого индекса в массиве1.

Я исследовал онлайн, но я не могу найти подходящее решение, которое я могу понять, как его реализовать.

Как это реализовать?

Вот PLIST файл - https://gist.github.com/iulianvarzaru/11c400ba1edf4a165082

И файл JSON - https://gist.github.com/iulianvarzaru/1915e02a9201c57f49b3

+0

Что такое ключ, какое значение? – vikingosegundo

+0

Ключ AUD, EUR, USD и т. Д. (Этот valus я получаю из файла Json), а ключ evey присвоил значение. Теперь я создал файл plist, чтобы повторно заказать эти ключи по-разному. Я хочу изменить порядок json-массива, чтобы получить значение для каждого ключа. –

+0

Вы действительно заботитесь о порядке массива 1 или вы просто пытаетесь получить описание из кода валюты? –

ответ

1

Учитывая, что файл JSON, с которым вы связаны, не содержит массив, а словарь, вы можете просто перебрать array1 из файла plist. Каждый элемент этого массива - это словарь с ключом «Треска» и клавишей «Descriere». Получите значение для ключа «Cod», а затем просто используйте это значение в качестве ключа в словаре из файла JSON.

NSDictionary* jsonFileDict = ...; 
NSDictionary* jsonFileInnerDict = jsonFileDict[@"rate"]; 
for (NSDictionary* dict in array1) 
{ 
    NSString* code = dict[@"Cod"]; 
    NSNumber* jsonNumber = jsonFileInnerDict[code]; 
    // Do something with jsonNumber 
} 
+0

Это делает именно то, что мне нужно, спасибо за вашу быструю помощь! –

0

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

Если вы можете манипулировать JSON-файлом как JSON, тогда он уменьшает преобразование, но не может быть наиболее эффективной реализацией.

Предостережения:

  1. Этот метод предполагает, что вы не будете иметь ключ перегрузки (что возможно в числовом массиве, но не в карте)
  2. Это требует преобразования из одной структуры данных в другую

EDIT: (из-за увеличенной информации OP).

Файл JSON, который вы получаете, не содержит массив, он содержит объект. Таким образом, все значения являются прямым поиском. Таким образом, вы можете перемещать свой массив в Obj-c и напрямую обращаться к соответствующим значениям в JSON.

Извините за отсутствие фактических кодовых образцов.

+0

Вы говорите об объективе-c? – vikingosegundo

+0

Концепция является агностиком языка. Это было бы лучше всего реализовано в Obj-c с 'NSMutableDictionary' – wrossmck

+0

вопрос о объективе-c. у какао нет карты, числового массива или перегрузки ключей. это целевые задачи для реального API. – vikingosegundo

0

Вы имеете дело со словарем в ответе, а не с массивом.

Вы должны превратить его в нечто вроде

{ 
    @"currency": @"EUR", 
    @"value": 123.45 
} 

создавать и сортировать это это как

NSArray *keys = @[@"EUR",@"USD",@"AUD"]; 
NSDictionary *dict = @{@"AUD":@(123.242), @"EUR": @(535.123), @"USD": @(325.646)}; 
NSMutableArray *result = [@[] mutableCopy]; 

for (NSString *key in keys) { 
    [result addObject:@{@"value":dict[key], @"currency": key}]; 
} 
NSLog(@"%@", result); 

(
     { 
     currency = EUR; 
     value = "535.123"; 
    }, 
     { 
     currency = USD; 
     value = "325.646"; 
    }, 
     { 
     currency = AUD; 
     value = "123.242"; 
    } 
) 

Или написать класс модели, который может обрабатывать эту информацию.

Смежные вопросы