2012-10-16 39 views
0

我具有其中我有成员的细节的应用程序作为dictionary.i想从我有是这样的dictionary.The响应添加与特定的对象阵列,如何用字典中的特定项目创建数组?

{ 
    500 =  { 
     name = baddd; 
     status = "<null>"; 
    }; 
    511 =  { 
     name = abyj; 
     status = "Hi all...:-)"; 
    }; 
    512 =  { 
     name = abyk; 
     status = fdffd; 
    }; 
} 

我想创建一个只有name的结果的数组。我曾尝试过这样的

for(int i=0;i<=self.currentChannel.memberCount;i++) 
{ 

    NSString *name=[NSString stringWithFormat:@"%@",[self.currentChannel.members objectForKey:@"name"]] ; 
    NSLog(@"%@",name); 
    [searchfriendarray addObject:name]; 


} 
NSLog(@"%@",searchfriendarray); 

但添加的值为空。有谁能够帮助我 ?

+0

您的代码的问题似乎是,您不要在任何地方使用数组索引。要枚举字典,使用'for ... in'语法是最简单的。看到我的答案。 – Krumelur

回答

1

遍历objectEnumerator获取值(内部词典)。然后,只需将“name”的值添加到结果数组中。例如(假定该词典被命名为d):

NSDictionary* d = ... 
NSMutableArray* array = [NSMutableArray arrayWithCapacity:d.count]; 
for(NSDictionary* member in d.objectEnumerator) { 
    [array addObject:[member objectForKey:@"name"]]; 
} 
+0

如果你编辑我的代码,它会很好,所以我没有得到你? – hacker

+0

我很难说你应该如何编辑你的代码,因为我不知道你的类是如何定义的。一般来说,上面的'd'不管你的字典是什么(我的猜测是'self.currentchannel.members',对吧?) – Krumelur

0

克鲁梅尔尔比我更快;)他是正确的saing,你应该首先遍历字典中的值。在你的实现中,你不会在某个地方引用你的计数器变量,所以NSString的名字在每次迭代中都是一样的。

0

这可能会帮助你..

// here you can get Array of Dictionary First 
    NSArray *arr = [[NSArray alloc] initWithContentsOfFile:@""]; // get array first from your response 
    NSDictionary *temp = [[NSDictionary alloc] initWithDictionary:self.currentChannel.members]; 
    for(int i=0;i<=self.currentChannel.memberCount;i++) 
    { 

     NSDictionary *temp = [arr objectAtIndex:i]; 
     NSString *name=[NSString stringWithFormat:@"%@",[temp objectForKey:@"name"]] ; 
     NSLog(@"%@",name); 
     [searchfriendarray addObject:name]; 


    } 
    NSLog(@"%@",searchfriendarray); 

感谢。