我有一个包含以下内容的可变数组:
2012-05-26 23:38:09.606 [8147:f803] log (
{
send = david;
receive = mike;
message = test me;
},
{
send = david;
receive = daddy;
message = test me;
},
{
send = david;
receive = daddy;
message = test me;
}
)
我发现像这样的重复值:
NSSet *uniquearray = [[NSSet alloc] init];
uniquearray = [[NSSet setWithArray: myArray] valueForKey:@"receive"];
2012-05-26 23:38:09.609 [8147:f803] log (
mike,
daddy
)
但是,如果我想要检索消息我怎么能这样做?我只想要像拿(可能重建一个nsarray)
这样的东西2012-05-26 23:38:09.609 [8147:f803] log (
{
receive = mike,
message = test me;
},
{
receive = daddy
message = test me;
})
感谢。
答案 0 :(得分:3)
你需要澄清你对自己想要什么的看法。例如,如果给“爸爸”的两条消息有不同的内容怎么办?你想要哪一个?或者你想保留两者吗?
如果您想保留所有独特的消息而不关心订单,您可以这样做:
NSSet* uniqueSet = [NSSet setWithArray:myArray];
如果您需要iOS 5.0或更高版本,则可以使用NSOrderedSet
保留订单:
NSOrderedSet* uniqueSet = [NSOrderedSet orderedSetWithArray:myArray];
如果您只想保留每个接收者的一条消息,您可以这样做:
NSMutableArray* uniqueArray = [NSMutableArray array];
NSMutableSet* seen = [NSMutableSet set];
for (NSDictionary* dict in myArray)
{
NSString* receiver = [dict objectForKey:@"receiver"];
if (![seen containsObject:receiver])
{
[uniqueArray addObject:dict];
[seen addObject:receiver];
}
}
另外,如果变量uniquearray
不是数组而是集合,则不应将其命名。其次,这段代码:
NSSet *uniquearray = [[NSSet alloc] init];
uniquearray = [[NSSet setWithArray: myArray] valueForKey:@"receive"];
分配一个空集,然后抛弃指向它的指针,用指向不同集的指针替换指针。第一个对象完全被浪费了。如果你没有使用ARC,它也会被泄露。
答案 1 :(得分:0)
您可能想要使用NSDictionary,我知道您可以使用keysOfEntriesPassingTest或其他帮助您使用密钥的方法创建数组。