【问题标题】:Issue with Sorting NSMutableArray排序 NSMutableArray 的问题
【发布时间】:2013-06-04 13:22:02
【问题描述】:

我有一个包含 NSDictionary 的 NSMutableArray,我需要根据某些条件对数组进行排序。

排序标准是

  1. 根据properties.property.value 排序,假设我想根据properties.property.name = Risk 值进行排序。我希望所有具有风险值的元素都以升序排列。这意味着对于没有的字典 properties.property.name = Risk 必须排在最后。有些词典没有这些名称。

请帮忙...

finalArr (
    {
    ViewTag = 101;
    "action-taken-date" =         {
        class = "java.util.GregorianCalendar";
        text = "2013-06-03 22:23:28.0 PDT";
    };
    alarms = 0;
    alerts = 0;
    application =         {
    assignee = "Test Name";
    completed = false;
    "properties" =         {
        class = "java.util.ArrayList";
        property =             (
                            {
                label = Risk;
                name = Risk;
                value = "3 - Low";
            },
                            {
                label = "Start Time";
                name = "Start Time";
                value = "05/09/13 06:00:00";
            }
        );
    };

    {
    ViewTag = 102;
    "date" =         {
        class = "java.util.GregorianCalendar";
        text = "2013-06-03 22:23:28.0 PDT";
    };
    alarms = 0;
    alerts = 0;
    application =         {
    assignee = "Test Name";
    completed = false;
    "properties" =         {
        class = "java.util.ArrayList";
        property =             (
                            {
                label = Risk;
                name = Risk;
                value = "2 - Low";
            },
                            {
                label = "Start Time";
                name = "Start Time";
                value = "05/09/13 06:00:00";
            }
        );
    };

    {
    ViewTag = 103;
    "date" =         {
        class = "java.util.GregorianCalendar";
        text = "2013-06-03 22:23:28.0 PDT";
    };
    alarms = 0;
    alerts = 0;
    application =         {
    assignee = "Test Name";
    completed = false;
    "properties" =         {
        class = "java.util.ArrayList";
        property =             (
                            {
                label = Status;
                name = Status;
                value = "Pending Signoffs";
            },
                            {
                label = Priority;
                name = Priority;
                value = 3;
            }
        );
    };

{
    ViewTag = 104;
    "date" =         {
        class = "java.util.GregorianCalendar";
        text = "2013-06-03 22:23:28.0 PDT";
    };
    alarms = 0;
    alerts = 0;
    application =         {
    assignee = "Test Name";
    completed = false;
    "properties" =         {
        property =             (
            {
                label = Priority;
                name = priority;
                value = 1;
            },
            {
                label = "Start Time";
                name = "Start Time";
                value = "05/09/13 06:00:00";
            }
        );
    };

{
    ViewTag = 103;
    "date" =         {
        class = "java.util.GregorianCalendar";
        text = "2013-06-03 22:23:28.0 PDT";
    };
    alarms = 0;
    alerts = 0;
    application =         {
    assignee = "Test Name";
    completed = false;
    "properties" =         {
        property =             (
                            {
                label = Status;
                name = Status;
                value = "Pending Signoffs";
            },
                            {
                label = Priority;
                name = Priority;
                value = 2;
            }
        );
    };
)

【问题讨论】:

  • 当您发现难以使用时,说明设计有问题。

标签: ios cocoa-touch sorting nsmutablearray


【解决方案1】:

试试这个

NSString *risk = @"Risk";
[finalArray sortUsingComparator:^NSComparisonResult(NSDictionary * dict1, NSDictionary * dict2) {

    NSDictionary *property1 = dict1[@"properties"][@"property"][0];
    NSString *name1 = property1[@"name"];

    NSDictionary *property2 = dict2[@"properties"][@"property"][0];
    NSString *name2 = property2[@"name"];

    if ([name1 isEqualToString:name2]) {
        //if both names are equal then they are sorted based on value
        NSString *value1 = property1[@"value"];
        NSString *value2 = property2[@"value"];
        return [value1 compare:value2 options:NSNumericSearch];
    }else if ([name1 isEqualToString:risk]){
        //if name1 is equal to risk it is moved up
        return NSOrderedAscending;
    }else{
        return NSOrderedDescending;
    }

}];

【讨论】:

    【解决方案2】:

    听起来您有多个不同的要求(逻辑)来确定所需的排序结果。您应该编写自己的比较逻辑并使用数组方法之一,例如sortUsingComparator:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多