【问题标题】:How to sort order of an array with dictionaries in ios如何在ios中使用字典对数组的顺序进行排序
【发布时间】:2014-05-20 13:40:03
【问题描述】:

我有一个这样的数组。

rows1 (
    "Adam Harris",
    "Devraj Singh",
    "Devraj Singh",
    "Er Devraj Gurjar",
    "Ghh HHS",
    "Mark Json",
    "Ninehertz India",
    "Ninehertz India",
    "Test User",
    "Test Test",
    "Yatin TFT"
)

我用过下面的代码

NSArray *rows = ...;
    NSMutableDictionary *map = [NSMutableDictionary dictionary];
    for (NSString *value in rows) {
        NSString *firstLetter = [value substringToIndex:1];
        if (!map[firstLetter]) {
            map[firstLetter] = @[];
        }
        NSMutableArray *values = [map[firstLetter] mutableCopy];
        [values addObject:value];
        map[firstLetter] = values;
    }
    NSArray *finalRows = [map allValues];

按字母顺序对数组进行排序。排序有两个条件 1.) 所有以相同字母开头的单词都应该分组,我已经实现了,如下面的数组所示。现在我的问题是我想按字母顺序排列所有分组的项目。 2.)数组的所有分组元素现在应该按字母顺序排序。以下是我取得的成就。

 (
            (
            "Devraj Singh",
            "Devraj Singh"
        ),
            (
            "Mark Json"
        ),
            (
            "Er Devraj Gurjar"
        ),
            (
            "Adam Harris"
        ),
            (
            "Ninehertz India",
            "Ninehertz India"
        ),
            (
            "Test User",
            "Test Test"
        ),
            (
            "Ghh HHS"
        ),
            (
            "Yatin TFT"
        )
    )

而我想要做的如下

(
                (
                "A1",
                "A2"
            ),
                (
                "B1"
            ),
                (
                "C1"
            ),
                (
                "D1"
            ),
                (
                "E1",
                "E2",
                "E3"
            ),
                (
                "F1",
                "F2"
            ),
                (
                "G1"
            ),
                (
                "H1"
            )
        )

【问题讨论】:

    标签: ios sorting nsarray nsdictionary alphabetical


    【解决方案1】:

    最简单的解决方案是将最后一行更改为:

    NSArray *finalRows = [[map allValues] sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
            NSString *letter1 = [obj1[0] substringToIndex:1];
            NSString *letter2 = [obj2[0] substringToIndex:1];
            return [letter1 compare:letter2];
        }];
    

    这不是最有效的解决方案,但它确实有效。

    【讨论】:

      【解决方案2】:

      您可以实现以下目标:

      NSArray *rows1 = @[
                             @"Adam Harris",
                             @"Devraj Singh",
                             @"Devraj Singh",
                             @"Er Devraj Gurjar",
                             @"Ghh HHS",
                             @"Mark Json",
                             @"Ninehertz India",
                             @"Ninehertz India",
                             @"Test User",
                             @"Test Test",
                             @"Yatin TFT"
                             ];
      
          NSArray *sortedArray = [rows1 sortedArrayUsingSelector:@selector(compare:)];
      
          NSMutableDictionary *dict = [NSMutableDictionary new];
      
          //make keys and store
          for (NSString *str in sortedArray) {
              NSString *key = [str substringToIndex:1];
      
              //store the str if this is first object
              if (dict[key]== nil ) {
                  NSArray *arr = @[str];
                  [dict setObject:arr forKey:key];
              }
              //if there is another get the array and add more
              else{
                  NSMutableArray *arr = [dict[key] mutableCopy];
                  [arr addObject:str];
                  [dict setObject:arr forKey:key];
              }
      
          }
          NSLog(@"Dict: %@",dict);
      

      【讨论】:

        猜你喜欢
        • 2020-09-26
        • 2015-03-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多