【问题标题】:iOS: how to filter array from another array based on parameter valueiOS:如何根据参数值从另一个数组中过滤数组
【发布时间】:2017-11-29 02:53:11
【问题描述】:

我有一个NSArray (DataArray),其响应如下:

  {
"id": "17",
"item_name": "Chivito",
"item_price": "88.00",
"item_status": "Y",
"is_admin": "0",
"item_quantity": "120",
"status": 0
},
  {
"id": "14",
"item_name": "Doughnut",
"item_price": "50.00",
"item_status": "Y",
"is_admin": "0",
"item_quantity": "100",
"status": 1
},
  {
"id": "37",
"item_name": "Drink test ",
"item_price": "80.00",
"item_status": "Y",
"is_admin": "0",
"item_quantity": "12",
"status": 1
},

我必须创建另一个仅包含状态值为“1”的对象的过滤数组 请帮助我如何做到这一点

【问题讨论】:

标签: ios objective-c arrays sorting filtering


【解决方案1】:

参考@Hady ans,在 Objective-C 中你可以这样做。如果有任何格式/语法问题,请原谅。我离开了我的系统。

NSMutableArry *filteredArray = [NSMutableArray alloc]init];

for (i=0;i<dataArray.count;i++)
{
   if([dataArray[i][@"status"] isEqualToNumber:[NSNumber numberWithInt: 1]])      //if(dataArray[i]["status"] == 1)
    {
      [filteredArray addObject:dataArray[i]];
     }
 }

希望对您有所帮助.. 编码愉快!!

【讨论】:

  • 在 Swift 中是这样完成的,并不意味着在 Objective-C 中也是这样。
  • 上面的代码将给出所需的结果。我不只是翻译它。我真的不认为它值得投反对票!!!
  • 感谢它有效,我将 if(dataArray[i]["status"] == 1) 替换为 if([DataArray[i][@"status"] isEqualToNumber:[NSNumber numberWithInt: 1] ])
  • 不客气。如果对你有帮助,你可以接受我的回答。其实我不知道数据格式。感谢您的编辑。
  • @luckyShubhra 它可能会起作用。就像其他 2 个答案一样。除了这个答案有 8 行代码而不是 2 行。但除此之外。还有数百个其他 SO 问题在问完全相同的事情。所以这个问题根本不应该存在。
【解决方案2】:

试试:

目标-C:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF.status == %d",1];
    NSArray *filtered = [DataArray filteredArrayUsingPredicate:predicate];
    NSLog(@"RESULT: %@", filtered);

【讨论】:

  • @downVoters 为什么会有这么多的downVotes?在这种情况下也可以使用predicate
【解决方案3】:

尝试谓词它的简单和更少的循环。

NSPredicate *sizePredicate = [NSPredicate predicateWithFormat:@"status == %@",[NSNumber numberWithBool: YES]];

NSMutableArray * filtersSizeArray = [self.arrayFilter filteredArrayUsingPredicate:sizePredicate].copy;

【讨论】:

    【解决方案4】:

    你可以试试这个:

    NSPredicate *prediate = [NSPredicate predicateWithFormat:@"status == %d",1];
    arrResult = [myArray filteredArrayUsingPredicate:prediate];
    

    【讨论】:

      【解决方案5】:

      试试这个

      array.filter{(object) -> Bool in 
        if let object = object as NSDictionary {
          if let status = object["status"] as? Int {
            return status == 1
          }
        }
        return false
      }
      

      【讨论】:

      • 在 Objective-C 中检查我的答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-30
      • 2014-05-03
      • 1970-01-01
      • 2021-05-19
      • 2022-08-11
      • 1970-01-01
      相关资源
      最近更新 更多