1
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 对象唯一地基于scheduleTestId

如果我考虑上面的例子,那么它会给我两个 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];
    }
}

submitTestUniqueArray包含我想要的输出,即

[{
    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";
}]
4

2 回答 2

0

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

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

    }
else
{
[submittedTestArray removeObjectAtIndex:currentIndex];
}
于 2012-12-26T11:08:04.263 回答
0

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

理想情况下,您尝试过的是完美的。因为要从字典中删除重复记录,需要有一堆记录,在本例中是一个名为uniqueKeys的数组,其中包含scheduleTestId值,以将每个字典元素与所有其他元素进行比较以进行重复。

这正是你所做的。

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

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

因为有 2 个可变数组,一个只有唯一的键,另一个有具有唯一记录的字典对象没有任何意义。当然,我认为您不需要只有唯一键的数组。你需要的是字典而不是数组,对吧?

所以简而言之,我在您的代码中没有发现任何性能改进。

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

干杯快乐编码

于 2012-12-27T12:40:53.527 回答