通过将 JSON 数据与数组进行比较来创建数组

Posted

技术标签:

【中文标题】通过将 JSON 数据与数组进行比较来创建数组【英文标题】:Create array by comparing JSON data to an array 【发布时间】:2014-10-19 17:14:25 【问题描述】:

我正在从 json 文件访问“酒店”:

NSArray *hotel = [jsonObject valueForKeyPath:@"location.hotel"];

打印出来像(更新):

<__NSCFArray 0x7b254d70>(

    test = A;
    hotel =     (
                
            luxuryHotels = hotel1;

        ,
                
            luxuryHotels = hotel2;

        ,    

我想检查数组“hotel”是否包含来自另一个数组“myHotels”的对象,如果包含,则创建一个仅包含这些对象的数组。

NSArray *myHotels = [NSArray arrayWithArray:hotel.luxuryHotels];
NSMutableArray *hotel2 = [[NSMutableArray alloc] init];
for (NSArray *object in hotel) 
    NSMutableSet *set1 = [NSMutableSet setWithArray: object];
    NSSet *set2 = [NSSet setWithArray: myHotels];
    [set1 intersectSet: set2];
    NSArray *resultArray = [set1 allObjects];
    NSLog(@"resultArray is %@",resultArray);
    [hotel2 addObject:resultArray];

'hotel2' 的打印是这样的:( ),( 凯悦 ),( )

有没有办法得到一串唯一的凯悦?或者一种组合数组字典的方法,以便在列出多个酒店时显示在列表中?

【问题讨论】:

[jsonObject valueForKeyPath:@"location.hotel"] 返回的结构不清楚。请发布酒店日志的实际输出。 查看更新,让我知道我还能提供什么。 我认为您不了解数据结构,我们当然也不了解。添加 NSLog 语句以在每个步骤中转储您的数组。这意味着我不知道hotel 是否应该是一个数组:hotel.luxuryHotels 【参考方案1】:

仍然不是 100% 清楚数据结构是什么样的,但您可以尝试这样的方法

将您的初始数据结构(数组数组)折叠成一个数组,然后将其转换为一个可变集合

NSArray *flattenedHotels = [jsonObject valueForKeyPath:@"@distinctUnionOfArrays.location.hotel"];

NSMutableSet *hotels = [NSMutableSet setWithArray:flattenedHotels];

接下来你只需与myHotels进行交集

[hotels intersectSet:[NSSet setWithArray:myHotels]];

NSArray *result = hotels.allObjects;

【讨论】:

以上是关于通过将 JSON 数据与数组进行比较来创建数组的主要内容,如果未能解决你的问题,请参考以下文章

通过使用 Spring Boot 插入来自循环的所有数据来创建 JSON 数组

如何通过比较字符串出现的位置来对字符串列表进行排序?

通过React Native显示JSON数据-json数组

将日期与laravel中mysql json数组的每个值进行比较

如何通过与id进行比较来合并三个不同的数组?在Angular 6中

如何将数组数据编码为json?