我有一个包含条目词典的NSMutableArray。每个条目都有几个键,其中一个是“Title”,其中包含一个名称字符串。
数据模型中有许多重复项,因为某些条目与不同的部分相关。例如,“流感”可能在“发烧”或“疼痛和疼痛”下找到。所以,现在我有一个键值对,有两个名为“流感”的条目作为标题。
在TableViewController中实现搜索时,如果我输入“Influenza”,我会得到重复项。为了删除它们,我尝试了以下内容:
self.searchEntries = [[NSSet setWithArray:entries]allObjects];
[searchEntries sortedArrayUsingSelector:@selector(compareName:)];
然而,这似乎没有做任何有用的事情。我仍然得到重复,列表不按字母顺序排列。
任何人都可以帮我解决这个看似简单的问题吗?
答案 0 :(得分:1)
您的副本是否真的重复?或者是否有任何特殊字符/大写字母?
要进行排序,您必须
searchEntries = [searchEntries sortedArrayUsingSelector:@selector(compareName:)];
因为- sortedArrayusingSelector:
将返回NSArray。
<强>更新强>
由于entries
包含NSDictionary
类型的元素,因此您可以获得唯一的&amp;排序数组如下:
searchEntries = [entries valueForKeyPath:@"@distinctUnionOfObjects.title"];
searchEntries = [searchEntries sortedArrayUsingSelector:@selector(compare:)];
请注意,searchEntries
现在只包含标题值(如果您只想在tableView中显示它们,则可能没问题。)
答案 1 :(得分:1)
我希望这段代码对你有帮助
NSSet *uniqueElements = [NSSet setWithArray:myArray];
// iterate over the unique items
for(id element in uniqueElements) {
// do something
}
祝你好运
答案 2 :(得分:0)
首先,数组中的对象都需要响应您选择的选择器。据我所知,NSDictionary不响应compareName:
其次,sortedArray ...方法创建一个全新的数组。 NSMutableArray有一些in place sort methods。
如果您有一个可变数组-sortUsingComparator:
,可能最简单的方法就是使用。
[[self searchEntries] sortUsingComparator: ^(id obj1, id obj2)
{
return [[obj1 title] compare: [obj2 title]];
}];
如果你有一个不可变数组
sortedArray = [[self searchEntries] sortedArrayUsingComparator: ^(id obj1, id obj2)
{
return [[obj1 title] compare: [obj2 title]];
}];