【问题标题】:Filter NSMutableArray with All the values of nsarray使用 nsarray 的所有值过滤 NSMutableArray
【发布时间】:2016-08-20 07:43:28
【问题描述】:

我有这样的 MutableArray...

    restaurants = ({
    cuisines =   ({
                    "cuisine_id" = 1;
                    "cuisine_name" = Indian;
                },
                {
                    "cuisine_id" = 2;
                    "cuisine_name" = SriLanka;
                }
            );}

            { cuisines = ({
                    "cuisine_id" = 1;
                    "cuisine_name" = Chinese;
                },
                {
                    "cuisine_id" = 2;
                    "cuisine_name" = Afghani;
                }
            );}

           {cuisines =({
                    "cuisine_id" = 1;
                    "cuisine_name" = Chinese;
                },
                {
                    "cuisine_id" = 2;
                    "cuisine_name" = Afghani;
                }
            );}
        )

我正在过滤带有多个美食名称值的餐厅数组 例如,如果我有一个,

Nsarray 喜欢这个美食名称 ( 印度人, 斯里兰卡, 中国人, )

我想根据 cusine_name 的每个对象过滤我的餐厅数组。

目前我正在这样做..

        NSPredicate *predicateCuisines = [NSPredicate   predicateWithFormat:@"(cuisines.cuisine_name = %@)",[cuisineTypes      valueForKey:@"cuisine_name"]];
    [self.arrRestaurantList filterUsingPredicate:predicateCuisines];

但它使用描述进行过滤...对于包含三个值(印度、斯里兰卡、中国)的餐厅数组,但我想用美食名称的每个对象进行过滤。 任何帮助将不胜感激..

【问题讨论】:

  • 您所说的 cusine_name == 是什么意思?
  • cuisine_name 是 Nsdicationary 变量,正如您从美食数组中看到的那样,我想根据个人美食名过滤这个餐厅数组。我还有另一个美食名称数组..
  • 请检查我的答案。

标签: ios objective-c nsmutablearray


【解决方案1】:

请用这个

  NSArray* arrtu4 = @[@{@"cuisines" : @[@{@"cuisine_id" : @1,@"cuisine_name" : @"Indian"},@{ @"cuisine_id" : @2, @"cuisine_name" : @"SriLanka"}]},@{ @"cuisines" : @[@{@"cuisine_id" : @1,@"cuisine_name" : @"Chinese"},@{@"cuisine_id" : @2,@"cuisine_name" : @"Afghani"}]},@{@"cuisines" :@[@{@"cuisine_id" :@1,@"cuisine_name" : @"Chinese"},@{ @"cuisine_id" : @2,@"cuisine_name" : @"Afghani"}]}];
    NSMutableArray *arrryfilted = [NSMutableArray array];

    NSArray *arrayCountrys = @[@"Chinese",@"SriLanka",@"Indian"];

for (int i = 0; i<arrtu4.count; i++)
{

    NSArray *filterArray2 = [[arrtu4 objectAtIndex:i]valueForKey:@"cuisines"];

    NSArray *filterArray3 = [filterArray2 filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(id  _Nonnull evaluatedObject, NSDictionary<NSString *,id> * _Nullable bindings) {
        return [arrayCountrys containsObject:[evaluatedObject valueForKey:@"cuisine_name"]]  ;

                }]];




     [arrryfilted addObjectsFromArray:filterArray3 ];



}

NSLog(@"%@",arrryfilted);

输出:

2016-08-20 16:44:59.856 coredataReltaion[6762:152672] (
        {
        "cuisine_id" = 1;
        "cuisine_name" = Indian;
    },
        {
        "cuisine_id" = 2;
        "cuisine_name" = SriLanka;
    },
        {
        "cuisine_id" = 1;
        "cuisine_name" = Chinese;
    },
        {
        "cuisine_id" = 1;
        "cuisine_name" = Chinese;
    }
)

【讨论】:

  • 感谢您的回答...什么是 [evaluatedObject valueForKey:cuisine_name]
  • 在这里使用 @"cuisine_name" food_name 是您的 Nsdicationary 的对象
  • 抱歉,但它得到一个异常 ..valueForUndefinedKey:]:这个类不符合键值编码的键美食名称。'
  • 你能告诉我 arrRestaurantList 和 [cuisineTypes valueForKey:@"cuisine_name"] 的值吗
  • arrRestaurant 我已经向您展示了...和 ​​[cuisineTypes valueForKey:@"cuisine_name"] = (Srilankan,Chinese,Indian) 并且我想过滤 arrRestaurant 的值,分别是斯里兰卡人、中国人和印度人。 .
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多