2011-11-02 81 views
0

我有一个NSMutableArray包含词条的条目。每个条目都有几个键,其中一个是包含名称字符串的“标题”。创建一个数组,删除重复的名称,并按字母顺序

数据模型中有很多重复项,因为有些项与不同的部分有关。例如,“流感”可能在“发烧”或“疼痛和疼痛”下找到。所以,现在我有一个键值对与两个名为“流感”作为标题。

在TableViewController中实现搜索时,如果输入“Influenza”,我会得到重复项。为了删除它们,我尝试了以下操作:

self.searchEntries = [[NSSet setWithArray:entries]allObjects]; 
[searchEntries sortedArrayUsingSelector:@selector(compareName:)]; 

但是,这看起来没有什么用处。我仍然得到重复,列表不按字母顺序排列。

任何人都可以帮助我看起来很简单的事情吗?

回答

1

您的副本是否真的重复?还是有任何特殊字符/大写字母?

对于排序,你就必须做

searchEntries = [searchEntries sortedArrayUsingSelector:@selector(compareName:)]; 

- sortedArrayusingSelector:会返回一个NSArray。

更新: 作为entries包含NSDictionary类型的元素,你可以得到独特的&分类排列如下:

searchEntries = [entries valueForKeyPath:@"@distinctUnionOfObjects.title"]; 
searchEntries = [searchEntries sortedArrayUsingSelector:@selector(compare:)]; 

注意searchEntries现在只包含标题值(这可能是确定的,如果你只是想在tableView中显示它们)。

+0

感谢TILO。排序方法奇妙地起作用。至于重复,我只想比较字符串,如“流感”。 – awDemo

+0

您的“条目”包含“流感”,...“流感”,..?如果是这样,你的NSSet应该只包含一个“流感”。你能举一个例子吗? – tilo

+0

这是奇怪的事情...... NSSet出于某种原因返回多个“流感”。我可能在别处做错了什么,但似乎无法找到错误。 – awDemo

1

我希望这个代码帮助到u

NSSet *uniqueElements = [NSSet setWithArray:myArray]; 

// iterate over the unique items 
for(id element in uniqueElements) { 
    // do something 
} 

好运

+0

你可以扩大这个? – awDemo

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]]; 
       }]; 
+0

谢谢JeremyP,但我如何为300多个参赛者做这件事? – awDemo

+0

不确定你在问什么。使用给定的块对整个数组进行排序,以比较数组中的元素。 – JeremyP