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

Posted

技术标签:

【中文标题】从plist中的一组元素中获取唯一元素【英文标题】:Fetching unique element from a set of elements in plist 【发布时间】:2015-08-18 12:27:38 【问题描述】:

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

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

【问题讨论】:

解决方法有很多... 是的,这是可能的,例如,通过保留所选项目的 NSIndexSet 字典。我会试着给你看。 顺便说一句,'直到现在'是因为应用程序打开(我们可以使用内存)?还是自应用安装以来(我们可以使用 NSUserDefaults)? @Cœur 。您能否提供任何见解如何使用所选项目的 NSIndexSet 进行操作。或任何其他方式。 使用 NSUserDefaults 保存使用的值。使用值时,首先检查 NSUserDefaults 是否已使用该值。 【参考方案1】:

这里,

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

int index=[arrayOld indexOfObject:strX];

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



//临时数组将包含oldArray中不存在的Object。

【讨论】:

应用从后台移除后就会消失 @PareshNavadiya。谢谢你的代码。但我想与你分享一个场景,这将清除图片。我的 plist 有五个包含静态数据的数组。我可能会从数组中随机选择五个元素.现在我有近 3000 个条目,因此比较新旧条目可能会产生复杂性或延迟问题。【参考方案2】:

因此,使用 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 而不是静态变量中。

【讨论】:

以上是关于从plist中的一组元素中获取唯一元素的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中获取单成员集合中的唯一元素

如何将多个唯一元素附加到Python中的同一组列?

仅从更多元素中获取唯一名称

jQuery函数从数组中获取所有唯一元素?

从python列表中获取元素的唯一组合[重复]

Jquery UI - 从显示中获取一个元素:拖动时隐藏元素