如何根据某些键从NSDictionary中删除重复记录?

时间:2012-12-26 10:33:45

标签: objective-c nsdictionary

submittedTestArray =   [{
        scheduledTestId = "F7F15169-2FB6-4E47-A971-BAAD40D152AB";
        studentId = "8b3df16f-ff2f-4ad4-839c-6a937b79854d";
        submittedTestId = "37F20871-FB3A-47AA-B254-9E5409C5E4C4";
    }, {
        scheduledTestId = "440947DD-0A01-4DB8-8DD5-CCFA8F852FD3";
        studentId = "8b3df16f-ff2f-4ad4-839c-6a937b79854d";
        submittedTestId = "681689DC-B35C-491C-A737-AB19D9116FD9";
    }, {
        scheduledTestId = "440947DD-0A01-4DB8-8DD5-CCFA8F852FD3";
        studentId = "8b3df16f-ff2f-4ad4-839c-6a937b79854d";
        submittedTestId = "681689DC-B35C-491C-A737-AB19D9116FD9";
    }, {
        scheduledTestId = "440947DD-0A01-4DB8-8DD5-CCFA8F852FD3";
        studentId = "e18ead0a-d0fc-4e15-96ee-ecbd32880d97";
        submittedTestId = "A46965C6-14B1-401E-97C5-AD5BADCC02EE";
    }]

我希望所有NSDictionary对象都基于 scheduledTestId

如果我将考虑上面的例子,那么它将给我两个NSDictionary对象。

暂时我正在使用以下代码。

NSMutableArray *uniqueKeys =  [NSMutableArray arrayWithArray:[submittedTestArray valueForKeyPath:@"@distinctUnionOfObjects.scheduledTestId"]];
NSMutableArray *submittedTestUniqueArray = [[NSMutableArray alloc] initWithCapacity:uniqueKeys.count];
for (SubmittedTest *submittedTest in submittedTestArray) {
    if ([uniqueKeys containsObject:submittedTest.scheduledTestId ]) {
        [uniqueKeys removeObject:submittedTest.scheduledTestId];
        [submittedTestUniqueArray addObject:submittedTest];
    }
}

submittedTestUniqueArray 包含我想要的输出,即

[{
    scheduledTestId = "F7F15169-2FB6-4E47-A971-BAAD40D152AB";
    studentId = "8b3df16f-ff2f-4ad4-839c-6a937b79854d";
    submittedTestId = "37F20871-FB3A-47AA-B254-9E5409C5E4C4";
}, {
    scheduledTestId = "440947DD-0A01-4DB8-8DD5-CCFA8F852FD3";
    studentId = "8b3df16f-ff2f-4ad4-839c-6a937b79854d";
    submittedTestId = "681689DC-B35C-491C-A737-AB19D9116FD9";
}]

2 个答案:

答案 0 :(得分:0)

而不是for-in循环,使用for循环并在每次迭代之后

if ([uniqueKeys containsObject:submittedTest.scheduledTestId ]) {
        [uniqueKeys removeObject:submittedTest.scheduledTestId];

    }
else
{
[submittedTestArray removeObjectAtIndex:currentIndex];
}

答案 1 :(得分:0)

我不知道我写的是什么,但我仍然敢于回答。

理想情况下,您尝试过的是完美的。要从字典中删除重复记录,在这种情况下需要有一堆记录 一个名为 uniqueKeys 且带有 scheduledTestId 值的数组,用于将每个字典元素与所有其他元素进行比较以进行复制。

这就是你所做的。

我可以在此代码中建议的唯一改进是NSMutableArray *uniqueKeys

将其更改为NSArray *uniqueKeys;并在完成比较后&使用唯一记录收集字典对象,刷新数组元素,而不是逐个删除它们。

具有2个可变阵列的Coz,其中一个具有简单的唯一键和其他具有唯一记录的字典对象没有任何意义。当然我认为你不需要只有唯一键的数组。你需要的是字典而不是数组,对吗?

因此,简而言之,我在代码中找不到任何性能改进。

@ALL:如果我的技术知识有任何改进,请告诉我。

CHEERS HAPPY CODING