Ios 从plist中的一组元素中获取唯一元素

Ios 从plist中的一组元素中获取唯一元素,ios,objective-c,iphone,plist,Ios,Objective C,Iphone,Plist,我有一个包含多个数组的plist字典。 我将在我的应用程序中定期从plist获取数据。 这些数据存储在数组中。 现在我想要的是,每当我从任何数组中选择一个元素或条目时,我必须确保到目前为止,元素尚未被选择或使用 那么,是否有任何可能或可行的解决方案来完成这项任务。这里 NSArray *tempArray=[[NSArray alloc] init]; for(NSString *strX in plistArray){ int index=[arrayOld indexOfObject:st

我有一个包含多个数组的plist字典。 我将在我的应用程序中定期从plist获取数据。 这些数据存储在数组中。 现在我想要的是,每当我从任何数组中选择一个元素或条目时,我必须确保到目前为止,元素尚未被选择或使用

那么,是否有任何可能或可行的解决方案来完成这项任务。

这里

NSArray *tempArray=[[NSArray alloc] init];
for(NSString *strX in plistArray){

int index=[arrayOld indexOfObject:strX];

if(index==NSNotFound){
   [tempArray addObject:strX];
}

}

//临时数组将具有oldArray中不存在的对象。

因此,使用NSIndexSet在内存中提供了一个快速解决方案

static NSMutableDictionary *referenceDictionary;
static dispatch_once_t onceToken;
-(BOOL)canSelectElement:(id)obj fromArray:(NSString*)arrayKey
{
    dispatch_once(&onceToken, ^{
        referenceDictionary = [@{} mutableCopy];
    });
    // simulating a plist dic. Use your real plist dic.
    NSDictionary *infoDictionary = @{@"NSAppKeyExample1":@[@"A", @"B"], @"UIAppKeyExample2":@[@"C", @"D"]};

    if (referenceDictionary[arrayKey] == nil)
        referenceDictionary[arrayKey] = [NSMutableIndexSet indexSet];
    NSArray *array = infoDictionary[arrayKey];
    NSUInteger index = [array indexOfObject:obj];
    if ([referenceDictionary[arrayKey] containsIndex:index])
        return NO;
    [referenceDictionary[arrayKey] addIndex:index];
    return YES;
}

如果在应用程序关闭时需要持久性,请将referenceDictionary存储在NSUserDefaults中,而不是静态变量。

有许多解决方案……是的,这是可能的,例如通过保留选定项的NSIndexSet字典。我将尝试向您展示。顺便问一下,“直到现在”是因为应用程序已打开(并且我们可以使用内存)?或者自应用程序安装后(我们可以使用NSUserDefaults)?@Cœur。您能否提供如何使用所选项目的NSIndexSet进行此操作的详细信息。或者提供任何其他方式。使用NSUserDefaults保存使用过的值。当使用某个值时,首先检查NSUserDefaults中是否使用了该值。一旦从应用程序中删除该值,该值将消失background@PareshNavadiya.Thank我想和大家分享一个场景,让大家都清楚了。我的plist有五个数组,其中包含静态数据。我可以从列表中随机选择五个元素现在我有近3000个条目,所以比较新旧条目可能会造成复杂性或延迟问题。