我有一个看起来完全像这样的NSMutableArray:
(
{
nodeChildArray = (
{
nodeContent = 11111122;
nodeName = MyId;
},
{
nodeName = ShowTask;
},
{
nodeContent = 11115295;
nodeName = MyNumber;
},
{
nodeContent = 000003;
nodeName = CatId;
},
);
nodeName = Request;
},
{
nodeChildArray = (
{
nodeContent = 22222233;
nodeName = MyId;
},
{
nodeName = ShowTask;
},
{
nodeContent = 11115295;
nodeName = MyNumber;
},
{
nodeContent = 000003;
nodeName = CatId;
},
);
nodeName = Request;
}
)
如何创建包含MyId值的array或mutableArray?例如,具有(11111122,22222233)的数组。如何使nodeContent的值与其nodeName匹配? 这就像我想获得特定nodeName的nodeContent。
答案 0 :(得分:0)
很难说你的NSMutableArray看起来像你上面发布的内容,但我认为它包含的内容看起来像这样:
@interface MyObject
{
NSInteger nodeContent;
NSString *nodeName;
}
您希望循环遍历数组的所有元素,并从每个元素创建一个NSDictionary键/值对:
NSMutableDictionary *myDictionary = [[NSMutableDictionary alloc] init];
// myArray is the NSMutableArray you got from (wherever)
for (MyObject obj in myArray)
{
NSString *key = [NSString stringWithFormat:@"%d", obj.nodeContent];
[myDictionary setObject:obj forKey:key];
}
现在你有一个包含以下键的NSMutableDictionary:
11111122
22222233
每个键都有一个与之关联的对象。该对象与原始数组中的对象相同。然后,您可以使用以下方法检索对象:
MyObject *myObj = [myDictionary objectForKey:@"11111122"];
答案 1 :(得分:0)
也许这样的事情会起作用:
NSMutableArray *contentsForMyId = [NSMutableArray array];
for (NSDictionary *dict in YOURARRAY) {
for (NSDictionary *element in (NSArray*)dict[@"nodeChildArray"]) {
if ([element[@"nodeName"] isEqualToString:@"MyId"]) {
[contentsForMyId addObject:element[@"nodeContent"]];
}
}
}
答案 2 :(得分:0)
查看您发布的数据,我看到了一个外部字典数组。每个字典都包含它自己的字典数组。内部字典包含您的实际数据,其中包含NodeContent和NodeName。
我猜你想要遍历所有最里面的词典,找到nodeName值为" MyID"的entires,并收集这些词典的NodeContent值数组。
要绘制数据结构图,我就是这样看的:
Array
Dictionary
array
Dictionary
所以代码可能如下所示:
NSMutableArray *nodeContents = [NSMutableArray new];
for (NSDictionary *outerDict in outerArray)
{
NSArray *nodeChildArray = outerDict[@"nodeChildArray];
for (NSDictionary innerDict in nodeChildArray)
{
if ([innerDict[@"nodeName"] isEqualToString "MyID"])
{
NSString *thisNodeContent = innerDict[@"nodeContent"];
if (thisNodeContent != nil)
[nodeContents addObject: thisNodeContent];
}
}
}