【问题标题】:Conditionally retrieve fields from a dictionary, based on value of other field [duplicate]根据其他字段的值有条件地从字典中检索字段[重复]
【发布时间】:2012-12-20 18:16:48
【问题描述】:

可能重复:
Iterar over array of entity and get value of some key based on value of “other key” matche

如果状态字段不为空,谁能给我一个提示或提示,告诉我如何获取字典中所有salary 字段的值?我只想从字典中status != null 所在的那些对象中检索salary 字段。请注意,我的字典是动态的,这意味着我可能有四个以上的条目。非常感谢任何帮助或提示。提前谢谢你。

myArray=(
        {
        Name = "john1";
        Address = "san diego";
        Status = "active";
        salary = "100;

    },
        {
        Name = "steve ";
        Address = "birmingham";
        Status = "<null>";
        salary = "100;
    },
        {
         Name = "allan";
        Address = "san diego";
        Status = "active";
        salary = "100;
    },

     {
         Name = "peter";
        Address = "san diego";
        Status = "<null>";
        salary = "100;
    },
)

【问题讨论】:

    标签: ios nsarray compare nsdictionary


    【解决方案1】:

    尝试快速枚举...

    NSMutableArray* retreivedSalaries;
    
    for (NSDictionary* dict in myArray) {
        if (![[dict objectForKey:@"Status"] isEqualToString:@"<null>"])
            [retreivedSalaries addObject:[dict objectForKey:@"salary"]];
     };
    

    【讨论】:

      【解决方案2】:

      试试这个:

        NSDictionary *salaries = nil;
        NSArray *myArray .... ;
      
      
      for (NSString * salary in salaries) {
      
          if ([myArray containsObject:@"salary"]) {
      
              if ([salaries objectForKey:@"salary"] != NULL) {
      
                  NSLog (@"do something with salary: %@", salary);
              }
          }
      
      }
      

      【讨论】:

      • 我会尝试您的所有建议并给您反馈。谢谢大家的时间
      • 没问题。如果出现任何问题,请告诉我,我会尽力帮助您。
      • 我会将薪水的值放到 nsmutable 数组中,我可以像升序一样对其进行排序吗?
      • 是的,你可以,只要参考这些答案:stackoverflow.com/questions/5441856/…
      【解决方案3】:

      我认为这是 iOS,myArray 是一个 NSArray,每个人的信息都是一个 NSDictionary,如果这是重点,您可以执行以下操作:

      for (NSDictionary *info in myArray) {
      
          if ([info objectForKey:@"Status"] != nil && ![[info objectForKey:@"Status"] isEqual:@"<null>") {
              // Store salary whatever you need and in the formar you need
              NSString *salary = [info objectForKey:@"salary"]; 
          }
      
      }
      

      我在没有编译器的情况下编写了代码,所以可能存在一些编译器错误(抱歉)。如果我很好理解您的问题,那么您可以在 Status 不为空时获得薪水。

      希望有所帮助!

      【讨论】:

        【解决方案4】:

        我没有测试,所以你可能需要改变这个

        for (int i=0;i< [myArray count];i++)
        {
            if ([[[myArray objectAtIndex: i] objectForKey: @"Status"] isEqualToString: @"active"]) {
        
               NSLog(@"Salary is %@",[myArray objectAtIndex: i] objectForKey: @"salary"] )
            } else {
                NSLog(@"Status is not active");
            }
        }
        

        或者你可以使用类似的东西

          for (NSDictionary *salary in myArray)
            {
                if([message valueForKey:@"Status"] isEqualToString: @"active")
                   NSLog(@"Salary is %@",[message valueForKey:@"salary"]);      
        
            }
        

        工资排序

        您可以对键进行排序,然后通过迭代它们来创建 NSMutableArray。 answer from here

        NSArray *sortedKeys = [[myArray allKeys] sortedArrayUsingSelector: @selector(compare:)];
        NSMutableArray *sortedValues = [NSMutableArray array];
        for (NSString *key in sortedKeys)
            [sortedValues addObject: [myArray objectForKey: key]];
        

        【讨论】:

        • 最后一个概念作品! :D 我只需要先声明一个 NSString 变量,该变量将是条件内的测试。谢谢你! (y)
        • 工资值有没有排序的?
        • 确定你需要排序并将值添加到一个新的 nsmutable 数组中,我已经编辑了我的答案,看看它,如果它对你有帮助就接受这个答案
        • 太空尘埃。感谢您的时间和精力,但什么是 allKeys?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-10-16
        • 2023-03-30
        • 2019-07-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多