菜鸟教程小白 发表于 2022-12-13 15:07:32

ios - 使用 2 个排序描述符对数组进行排序


                                            <p><p>我有一个 <code>NSDictionary</code> 对象数组,每个对象都有一个 <code>EventDate</code> 和 <code>SecurityLevel</code>。我想先按日期排序,然后按安全级别排序。我该怎么做?</p>

<pre><code>Obj1: SecurityLevel: 5, Date: 20/05/2015 22:03
Obj2: SecurityLevel: 5, Date: 05/03/2015 05:28
Obj3: SecurityLevel: 4, Date: 14/04/2015 11:01
Obj4: SecurityLevel: 4, Date: 07/08/2015 09:31
Obj6: SecurityLevel: 3, Date: 24/04/2015 21:06
Obj5: SecurityLevel: 3, Date: 29/01/2016 22:38
Obj7: SecurityLevel: 2, Date: 02/06/2015 20:49
Obj8: SecurityLevel: 2, Date: 13/07/2015 17:46
Obj9: SecurityLevel: 1, Date: 19/08/2015 07:57
</code></pre>

<p>它们应该这样排序:</p>

<pre><code>Obj1: SecurityLevel: 5, Date: 20/05/2015 22:03
Obj2: SecurityLevel: 5, Date: 05/03/2015 05:28
Obj4: SecurityLevel: 4, Date: 07/08/2015 09:31
Obj3: SecurityLevel: 4, Date: 14/04/2015 11:01
Obj5: SecurityLevel: 3, Date: 29/01/2016 22:38
Obj6: SecurityLevel: 3, Date: 24/04/2015 21:06
Obj8: SecurityLevel: 2, Date: 13/07/2015 17:46
Obj7: SecurityLevel: 2, Date: 02/06/2015 20:49
Obj9: SecurityLevel: 1, Date: 19/08/2015 07:57
</code></pre>

<p>我做了类似的事情,但它没有按预期工作:</p>

<pre><code>- (NSArray*)sortEventsByDateAndSecurity:(NSArray*)toSort
{
    NSSortDescriptor *securityDescriptor = [ initWithKey:@&#34;SeverityLevel&#34; ascending:NO];
    NSArray *sortDescriptors = @;
    NSArray *sortedSecurity = ;

    NSArray *reverseOrderUsingComparator = [sortedSecurity sortedArrayUsingComparator:^(id obj1, id obj2) {

      NSDictionary *dictObject1 = (NSDictionary*)obj1;
      NSDictionary *dictObject2 = (NSDictionary*)obj2;

      NSDate *obj1Date = format:@&#34;dd/MM/yyyy HH:mm&#34;];
      NSDate *obj2Date = format:@&#34;dd/MM/yyyy HH:mm&#34;];

      return ;
    }];

    return reverseOrderUsingComparator;
}
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>您应该简单地调用 <code>sortedArrayUsingDescriptors:</code> 并使用 2 个描述符数组而不是 1 个:</p>

<pre><code>- (NSArray*)sortEventsByDateAndSecurity:(NSArray*)toSort
{
    NSSortDescriptor *securityDescriptor = [ initWithKey:@&#34;SeverityLevel&#34; ascending:NO];
    NSSortDescriptor *eventDateDescriptor = [ initWithKey:@&#34;EventDate&#34; ascending:NO comparator:^NSComparisonResult(NSString *obj1, NSString *obj2) {
      NSDate *obj1Date = ;
      NSDate *obj2Date = ;
      return ;
    }];
    NSArray *sortDescriptors = @;
    return ;
}
</code></pre>

<p>在这种情况下,第二个排序描述符将仅应用于与第一个排序描述符相等的对象。对于您的情况,这意味着具有相同 <code>SecurityLevel</code> 的对象将按 <code>EventDate</code> 排序。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 使用 2 个排序描述符对数组进行排序,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/35828656/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/35828656/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 使用 2 个排序描述符对数组进行排序