0

たとえば、nsdictionary オブジェクトを含む配列があります。

({"someKey" = "title";
  "name" = "someName";
 },
 {"someKey" = "title";
  "name" = "anotherName";
 }
 {"someKey" = "newTitle";
  "name" = "someName";
 }
)

この形式で並べ替えるのを手伝ってください:

({"someKey" = "title";
  "names": (
    {"name" = "someName"},
    {"name" = "anotherName"}
  )
 },
 {"someKey" = "newTitle";
  "names": (
   {"name" = "someName"}
  )
 }
)

ありがとう..

4

3 に答える 3

1

あなたの質問から私が理解している限り、個々のオブジェクトを1つの単一の辞書オブジェクトに選択したいと考えています..

NSArray *yourArray=.... /* array which contains this data: ({"someKey" = "title";
  "name" = "someName";
 },
 {"someKey" = "title";
  "name" = "anotherName";
 }
)*/
NSMutableDictionary *newDictionary=[[NSMutableDictionary alloc]init];

for(int i=0;i<[yourArray count];i++){
    [newDictionary setObject:[yourArray objectAtIndex:i] forKey:@"names"];
}
于 2012-10-17T15:17:26.470 に答える
0

現在の構造をトラバースして、タイトルを一意のキーとして新しい辞書を作成する必要があります。

NSEnumerator* arrayEnumerator = [myArray objectEnumerator];

NSDictionary* = dictFromArray;

NSMutableArray* titleArray = [[NSMutableArray alloc] init];
NSMutableDictionary* titleDict = [[NSMutableDictionary alloc] init];

while(dictFromArray = [arrayEnumerator nextObject])
{
    currentTitle = [dictFromArray objectForKey:@"someKey"];
    currentName = [dictFromArray objectForKey:@"name"];

    if([titles containsObject:currentTitle)
    {
    NSMutableDictionary namesArray = [titleDict objectForKey:currentTitle];
    [namesArray addObject:currentName];
    }
    else
    {
        [titles addObject:currentTitle];
        [titleDict addObject:[NSMutableArray arrayWithObject:currentName] forKey:currentTitle];
    }
}

これにより、次のような辞書が作成されます。

{
    title = 
    (
        someName,
        anotherName
    );

    newTitle = 
    (
        someName
    )
}

上記の正確な構造を取得するには、これでうまくいくと思います。

NSArray* titleKeys = [titleDict allKeys];

NSEnumerator* keyEnumerator = [titleKeys objectEnumerator];
NSMutableArray* finalArray = [[NSMutableArray alloc] init];
NSString* key;

while (key = [keyEnumerator nextObject])
{
    [finalArray addObject: [NSDictionary 
        dictionaryWithObjects:(key, [dictArray objectForKey:key])
        forKeys:(@"someKey", @"names")]];
}           
于 2012-10-18T21:00:50.447 に答える
0
 ({"someKey" = "title";
 "name" = "someName";
 },
   {"someKey" = "title";
  "name" = "anotherName";
 }
)

上記が同等であると仮定すると

NSArray *array=[NSArray arrayWithObjects:dictionary1,dictionary2,nil];

次に、以下の結果を達成する

  (
{
 "someKey" = "title";
"names": (
 {"name" = "someName"},
{"name" = "anotherName"}
  )
 }
)

これがあります:

 //Get name array 
 NSMutableArray *names=[NSMutableArray array];

 for(int i=0;i<[array count];i++)
 {
     NSDictionary *dictionary=[array objectAtIndex:i];
     [names addObject:[dictionary valueForKey:@"name"];
 }


 NSDictionary *newDictionary=[NSDictionary dictionaryWithOjbectsAndKeys:@"someKey",@"title",names,@"names",nil];

//Your final result is an array with one object ( A Dictionary )

NSArray *finalArray=[NSArray arrayWithObjects: newDictionary,nil];
于 2012-10-17T15:35:02.113 に答える