我有一个UITableView并且正在显示来自我的NSMutableArray的内容。以下是数组格式
(
{
Name = "ANS";
VersionNo = 6;
},
{
Name = "O-Hydro";
Version = 6;
},
{
Name = "ANS";
Version = 6;
},
{
Name = "ANTIChorosAnticholinergic";
Version = 6;
}
)
由此我需要只显示唯一的"姓名" (就像在这里我可以看到2" ANS"我只需要一个)。
我该如何在iOS中执行此操作?
我试过跟随,但它无法正常工作
uniqueArray= [[NSMutableSet setWithArray: groupDetails] allObjects];
但是这样我只能为NSArray而不是NSMutableArray。
请帮助我
答案 0 :(得分:0)
您可以使用以下代码行将NSArray转换为NSMutableArray,
NSArray *uniqueArray= [[NSMutableSet setWithArray:groupDetails] allObjects];
NSMutableArray *myMutableArray = [[NSMutableArray alloc] initWithArray:uniqueArray];
答案 1 :(得分:0)
如果您只想要一系列独特的name
值,则可以@distinctUnionOfObjects
使用valueForKeyPath
-
NSArray *uniqueArray=[groupDetails valueForKeyPath:@"@distinctUnionOfObjects.name"];
但是如果你想让数组包含对应于唯一名称的字典,那么你需要做更多的工作 -
NSMutableArray *uniqueArray=[NSMutableArray new];
NSMutableSet *nameSet=[NSMutableSet new];
for (NSDictionary *dict in groupDetails) {
NSString *name=dict[@"name"];
if (![nameSet containsObject:name]) {
[uniqueArray addObject:dict];
[nameSet addObject:name];
}
}
答案 2 :(得分:0)
您只需添加mutableCopy
即可。
但等等,在你做之前。数组和集合有两个差异:
所以做你正在做的事情,你会丢失重复(故意),但也会失去顺序(可能不是故意的)。
我不知道,这对你来说是否重要,但对于其他读者来说可能是这样。因此,使用NSOrderedSet
代替NSSet
:
NSOrderedSet *uniqueList = [NSOrderedSet orderedSetWithArray:array];
在许多情况下,有序集合正是您想要的。 (可能它从一开始就是NSArray
的使用是错误的。但有时你得到一个数组。)如果你真的想在一天结束时使用一个数组,你可以重新转换它:
array = [uniqueList.array mutableCopy];