基于第二个数组顺序对数组进行排序

时间:2013-11-09 16:18:18

标签: ios objective-c

我有一个来自plist的数组,每个值都包含一个键和一个字符串以及一个从json文件在线获取的辅助数组。我想根据第一个数组中的键来订购辅助数组。

我想实现这样的目标:

ARRAY1: 第0项 - 欧元        - 字符串 第1项 - 美元        - 字符串 第2项 - 澳元        - 字符串 等

数组2: 第0项 - 澳元        - 123.242 第1项 - 欧元        - 535.123 第2项 - 美元        - 325.646 等

我在两者上都有相同的键索引,但我想根据array1中键索引的顺序从array2获取键索引的值。

我在网上进行过研究,但我找不到合适的解决方案,我可以理解如何实现它。

我该如何实现?

以下是plist文件 - https://gist.github.com/iulianvarzaru/11c400ba1edf4a165082

json文件 - https://gist.github.com/iulianvarzaru/1915e02a9201c57f49b3

3 个答案:

答案 0 :(得分:1)

鉴于您链接到的JSON文件不包含数组而是字典,您可以简单地从plist文件迭代array1。该数组的每个元素都是一个带有“Cod”键和“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
}

答案 1 :(得分:0)

听起来这些是键值对,在这种情况下,您可以将其转换为Map,然后进行直接查找。

如果您可以将JSON文件操作为JSON,那么它会减少转换,但可能不是最有效的实现。

注意事项:

  1. 此方法假设您没有密钥重载(这可能在数字数组中,但不在地图中)
  2. 这需要从一个数据结构转换到另一个数据结构
  3. 编辑:(由于OP的信息增加)。

    您收到的JSON文件不包含数组,它包含一个对象。因此,所有值都是直接查找。因此,您可以在Obj-c中遍历数组,并直接访问JSON中的相应值。

    很抱歉缺少实际的代码示例。

答案 2 :(得分: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";
    }
)

或者编写一个可以处理此信息的模型类。