gpt4 book ai didi

ios - 在 Objective C 中检查一个数组是否包含另一个数组的对象

转载 作者:行者123 更新时间:2023-11-29 10:28:40 27 4
gpt4 key购买 nike

我正在使用下面的函数来检查一个数组中的对象是否存在于另一个数组中。如果该对象不存在,那么我将该对象添加到新数组,否则该对象将不会包含在我实例化的新数组中。

+ (NSMutableArray *)loadUngroupedSpeakerList
{
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

NSMutableArray *speakerList = [[NSMutableArray alloc] init];
NSArray *speakerIDList = [userDefaults objectForKey:DATA_SPEAKER_IDLIST];
NSArray *speakerIDListGrouped = [userDefaults objectForKey:DATA_SPEAKER_IDLIST_GROUPED];

//**** this is for checking the contents of speakerIDListGrouped ****//
for(NSString *speakerID in speakerIDListGrouped)
{
NSLog(@"FLOWCHECK~ loadUngroupedSpeakerList check content:%@", speakerID);
}

for(NSString *speakerID in speakerIDList)
{
if(![speakerIDListGrouped containsObject:speakerID])
{
NSLog(@"FLOWCHECK~ loadUngroupedSpeakerList: speakerID: %@", speakerID);

NSDictionary *speakerDict = [userDefaults dictionaryForKey:[NSString stringWithFormat:@"%@%@", DATA_SPEAKER_DICT, speakerID]];

[speakerList addObject:speakerDict];
}
}

return speakerList;
}

在上面的代码中,speakerList 包含了所有的speakerIDs。而 speakerIDListGrouped 仅包含组中使用的 speakerID。我的函数需要消除组中使用的所有 speakerID,因此我采用了与上述代码类似的方式。

我的问题:当我运行代码时,我注意到即使 speakerIDListGrouped 包含 speakerIDList 中的对象,这两行仍然会被执行

NSDictionary *speakerDict = [userDefaults dictionaryForKey:[NSString stringWithFormat:@"%@%@", DATA_SPEAKER_DICT, speakerID]];

[speakerList addObject:speakerDict];

据我了解,这不应该发生。因为我只允许它们在 speakerIDList 不包含该对象时执行。

这是我执行代码时的日志:

2015-06-15 19:31:24.849 soulbeats[1936:433953] FLOWCHECK~ loadUngroupedSpeakerList check content:72243140485836704
2015-06-15 19:31:24.850 soulbeats[1936:433953] FLOWCHECK~ loadUngroupedSpeakerList check content:7782687177520836128
2015-06-15 19:31:24.850 soulbeats[1936:433953] FLOWCHECK~ loadUngroupedSpeakerList: speakerID: 72243140485836704
2015-06-15 19:31:24.851 soulbeats[1936:433953] FLOWCHECK~ loadUngroupedSpeakerList: speakerID: 7782687177520836128

可以看出,speakerIDListGrouped 确实包含这两个对象。但是,当我尝试通过将字符串硬编码为我在 Log 上打印的对象之一(72243140485836704)来替换下部 for 循环内的字符串时。该函数现在可以正常工作,我的意思是它没有执行我之前显示的两行代码。

我现在很困惑。我硬编码的字符串和从数组中获得的字符串有什么区别?内容是一样的。

非常感谢!

最佳答案

我做了同样的事情,它工作正常......

NSMutableArray *speakerList = [[NSMutableArray alloc] init];
NSArray *speakerIDList = @[@"a",@"b",@"c",@"d",@"e"];
NSArray *speakerIDListGrouped =@[@"a",@"b",@"f",@"g",@"h"];
for(NSString *speakerID in speakerIDListGrouped)
{
NSLog(@"%@", speakerID);
}

for(NSString *speakerID in speakerIDList)
{
if(![speakerIDListGrouped containsObject:speakerID])
{
NSLog(@"FLOWCHECK~ loadUngroupedSpeakerList: speakerID: %@", speakerID);



[speakerList addObject:speakerID];
}
}

数组中的对象可能有问题....

关于ios - 在 Objective C 中检查一个数组是否包含另一个数组的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30844798/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com