ios - 遍历 nsmutablearray 并删除重复的对象

标签 ios objective-c

<分区>

我有一个如下所示的 NSMutableArray,我想查看并删除具有相同 realLocationName 和 ADD_LINE1 的对象 并只留下 realLocationName 对象。

我现在的数组:

(
        {
        locationId = "12-11-2013 10:23:53";
        realLocationName = wauk;
    },
        {
        locationId = "01-02-2014 10:10:11";
        realLocationName = sdf;
    },
        {
        locationId = "01-02-2014 11:55:49";
        realLocationName = "514 COURT AVE";
    },
        {
        "ADD_CITY" = city;
        "ADD_LINE1" = "514 COURT AVE";
        "ADD_LINE2" = "";
        "ADD_STATE" = IA;
        "ADD_ZIP" = 50833;
        "BUSINESS_NAME" = "";
        "FIRST_NAME" = joe;
        "LAST_NAME" = smith;
    },
        {
        "ADD_CITY" = cty2;
        "ADD_LINE1" = "514 COURT AVE";
        "ADD_LINE2" = "";
        "ADD_STATE" = IA;
        "ADD_ZIP" = 50833;
        "BUSINESS_NAME" = "";
        "FIRST_NAME" = randy;
        "LAST_NAME" = red;
    }
)

我想得到什么:

(
        {
        locationId = "12-11-2013 10:23:53";
        realLocationName = wauk;
    },
        {
        locationId = "01-02-2014 10:10:11";
        realLocationName = sdf;
    },
        {
        locationId = "01-02-2014 11:55:49";
        realLocationName = "514 COURT AVE";
    }
)

编辑:

或者这个场景: 数组 =

(
            {
            locationId = "12-11-2013 10:23:53";
            realLocationName = wauk;
        },
            {
            locationId = "01-02-2014 10:10:11";
            realLocationName = sdf;
        },
            {
            "ADD_CITY" = city;
            "ADD_LINE1" = "514 COURT AVE";
            "ADD_LINE2" = "";
            "ADD_STATE" = IA;
            "ADD_ZIP" = 50833;
            "BUSINESS_NAME" = "";
            "FIRST_NAME" = joe;
            "LAST_NAME" = smith;
        },
            {
            "ADD_CITY" = cty2;
            "ADD_LINE1" = "514 COURT AVE";
            "ADD_LINE2" = "";
            "ADD_STATE" = IA;
            "ADD_ZIP" = 50833;
            "BUSINESS_NAME" = "";
            "FIRST_NAME" = randy;
            "LAST_NAME" = red;
        }
    )

并得到这个:

(
            {
            locationId = "12-11-2013 10:23:53";
            realLocationName = wauk;
        },
            {
            locationId = "01-02-2014 10:10:11";
            realLocationName = sdf;
        },
            {
            "ADD_CITY" = city;
            "ADD_LINE1" = "514 COURT AVE";
            "ADD_LINE2" = "";
            "ADD_STATE" = IA;
            "ADD_ZIP" = 50833;
            "BUSINESS_NAME" = "";
            "FIRST_NAME" = joe;
            "LAST_NAME" = smith;
        }
    )

最佳答案

您可以使用一个集合 (NSMutableSet) 来检查是否添加了 realLocationName。

这段代码是如何工作的?

1) 每个对象,我得到“realLocationName”键或“ADD_LINE1”键的值,假设没有对象同时拥有这两个键,但肯定存在一个键

2) 数组的顺序是所有“realLocationName”对象都在开头部分 - 这是因为要求具有 realLocationName 的对象优先于具有 ADD_LINE1 的对象。

NSMutableArray *arr_noduplicates = [NSMutableArray array];
NSMutableSet *set_of_already_added = [NSMutableSet set];

for (NSDictionary *obj in originalArray) {
    NSString *str_value = [NSString stringWithFormat:@"%@%@", 
                          obj[@"realLocationName"] ? obj[@"realLocationName"] : @"", 
                          obj[@"ADD_LINE1"] ? obj[@"ADD_LINE1"] : @""];
    if (![set_of_already_added containsObject:str_value]) {
        [arr_noduplicates addObject:obj];
        [set_of_already_added addObject:str_value];
    }
}

关于ios - 遍历 nsmutablearray 并删除重复的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20889135/

上一篇:ios - 在类外单击按钮时将 tableView 添加为 subview

下一篇:ios - AFHTTPRequestOperationManager JSON 数据到数组

相关文章:

ios - 在 iOS 中从头开始创建视频

objective-c - UITableview 与 iPhone X 上的主页指示器合并

ios - 如何在我的 iOS 应用程序中播放 vimeo 私有(private)视频

ios - iOS 13 中的 modalPresentationStyle 默认值

ios - iPhone来电查看类?

iphone - 如何静音 AVFoundation 中的捕获声音?

ios - 无法计算 iOS App 上的文件大小

ios - 使用 initWithVertexBuffers 以编程方式生成 MDLMesh 对象

ios - 如何更改UITableViewHeaderFooterView的textLabel的高度?

ios - Cocoa-touch 中的自动引用计数 - 内联最佳实践