【问题标题】:Sorting Array Of two different object using NSSortDescriptor使用 NSSortDescriptor 对两个不同对象的排序数组
【发布时间】:2015-09-11 12:40:42
【问题描述】:

我有一个数组,它有两种类型的对象,即(Object1,Object2)。 Object1 具有名为“title”的属性,Object2 具有名为“name”的属性。

现在我想按字母顺序对数组进行排序。那么有什么方法可以让我使用 NSSortDescriptor(或任何其他东西)对包含具有不同 AttributesName 的对象的数组进行排序?

【问题讨论】:

    标签: ios objective-c nsarray nssortdescriptor alphabetical-sort


    【解决方案1】:

    试试这个

    NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"date" ascending:NO];
    NSArray *sortedArray = [detailsArray sortArrayUsingDescriptors:@[sortDescriptor]];
    

    查看此链接

    https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/SortDescriptors/Articles/Creating.html#//apple_ref/doc/uid/20001845-BAJEAIEE

    【讨论】:

      【解决方案2】:

      您可以使用以下代码来比较包含不同类型和值的对象的数组。

          arraySortedValues = [[arrayValues sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
              NSString *string1 = @"";
              NSString *string2 = @"";
              if ([obj1 isKindOfClass:[Object1 class]]) {
                  string1 = [obj1 valueForKey:@"title"];
              }
              if ([obj2 isKindOfClass:[Object1 class]]) {
                  string2 = [obj2 valueForKey:@"title"];
              }
              if ([obj1 isKindOfClass:[Object2 class]]) {
                  string1 = [obj1 valueForKey:@"name"];
              }
              if ([obj2 isKindOfClass:[Object2 class]]) {
                  string2 = [obj2 valueForKey:@"name"];
              }
              return [string1 compare:string2];
          }] mutableCopy];
      

      希望这有帮助,让我知道.. :)

      【讨论】:

      • 我只是在你发布这个答案之前做了同样的事情,并且正要回答我自己的问题,但后来我看到了你的答案。它的正确解决方案。作为奖励,我接受你的回答:)
      【解决方案3】:

      使用自定义类属性进行样本排序

      // Sample class 
      @interface Class1 : NSObject
      
      @property(nonatomic) NSString *titleStr;
      
      @end  
      
      @interface Class2 : NSObject
      
      @property(nonatomic) NSString *nameStr;
      
      @end  
      
      // Implementation Class
      
      // 1 ======  Pass unsorted array ======
      
         NSArray sortedArray = [self getSortedArray:objArray];
      
      // 2 Add below methods to your viewcontroller
      
      
      //Sorting methods
      - (NSArray *)getSortedArray:(NSMutableArray *)passedArray {
      
          NSArray *sortedArray = [passedArray sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
      
            return [[self getValue:obj1] compare:[self getValue:obj2]];
      
         }];
      
         return sortedArray;
      }
      
      - (NSString *)getValue:(id)obj {
      
         NSString *returnStr = @"";
      
         if ([obj isKindOfClass:[Class1 class]]) {
             returnStr = [obj valueForKey:@"titleStr"];
         }
      
         if ([obj isKindOfClass:[Class2 class]]) {
             returnStr = [obj valueForKey:@"nameStr"];
         }
      
         return returnStr;
       }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-03-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-02
        • 1970-01-01
        • 2021-02-23
        相关资源
        最近更新 更多