1

次の内容の可変配列があります。

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
)

しかし、メッセージを取得したい場合、どうすればこれを行うことができますか?私はちょうどtakeのようなものが欲しいです(多分nsarrayを再構築してください)

2012-05-26 23:38:09.609 [8147:f803]  log (
   {
       receive = mike,
       message = test me;
},
{
       receive = daddy
       message = test me;
})

ありがとう。

4

2 に答える 2

3

あなたが望むものについてのあなたの考えを明確にする必要があります。たとえば、「パパ」への 2 つのメッセージの内容が異なる場合はどうなるでしょうか。どれが欲しいですか?それとも両方を維持したいですか?

すべての一意のメッセージを保持し、順序を気にしない場合は、次のことができます。

NSSet* uniqueSet = [NSSet setWithArray:myArray];

iOS 5.0 以降が必要な場合はNSOrderedSet、注文を保持するために使用できます。

NSOrderedSet* uniqueSet = [NSOrderedSet orderedSetWithArray:myArray];

各受信者からのメッセージを 1 つだけ保持したい場合は、次のようにすることができます。

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"];

空のセットを 1 つ割り当ててから、そのセットへのポインターを破棄し、ポインターを別のセットへのポインターに置き換えます。最初のオブジェクトは完全に無駄です。ARC を使用していない場合は、それもリークされています。

于 2012-05-27T01:52:15.973 に答える
0

keysOfEntriesPassingTest またはキーの操作に役立つその他のメソッドを使用して配列を作成できることがわかっている場合は、NSDictionary を使用することをお勧めします。

http://developer.apple.com/library/ios/#DOCUMENTATION/Cocoa/Reference/Foundation/Classes/NSDictionary_Class/Reference/Reference.html

于 2012-05-26T22:43:15.367 に答える