我从我的网络服务中得到了一个带有JsonValue的NSArray。
myArray = [responseString JSONValue];这个数组在一个NSLog中给了我这个:
2012-02-18 18:22:46.338 Test[2758:fb03] myArray: (
{
receiver = david;
sender = sophie;
message = "test1";
photo = "****************.jpg";
},
{
receiver = david;
sender = matt;
message = "test2";
photo = "****************.jpg";
},
{
receiver = sophie;
sender = mike;
message = "test1";
photo = "****************.jpg";
},
{
receiver = david;
sender = ali;
message = "test1";
photo = "****************.jpg";
},
{
receiver = mike;
sender = david;
message = "test1";
photo = "****************.jpg";
},
{
receiver = admin;
sender = david;
message = "test1";
photo = "****************.jpg";
}
)我需要创建一个仅包含sender = 'David‘的新数组
我试着这样做:
for(int i=0;i<[myArray count];i++)
{
NSDictionary *dict1=[myArray objectAtIndex:i];
if ( [[dict1 objectForKey:@"sender"] isEqualToString:@"david"])
{
NSLog(@"YES");
myNewArray = [[NSArray alloc] initWithObjects:dict1, nil];
NSLog(@"array %@",myNewArray);
NSLog(@"count %d",[myNewArray count]);
}
else
{
NSLog(@"NO");
myNewArray2 = [[NSArray alloc] initWithObjects:dict1, nil];
NSLog(@"array2 %@",myNewArray2);
NSLog(@"count2 %d",[myNewArray2 count]);
}
}此myNewArray为我提供了以下功能:
2012-02-18 18:22:46.341 Test[2758:fb03] myNewArray (
{
receiver = mike;
sender = david;
message = "test1";
photo = "****************.jpg";
}
)
2012-02-18 18:22:46.341 Test[2758:fb03] myNewArray (
{
receiver = admin;
sender = david;
message = "test1";
photo = "****************.jpg";
}
)但是我需要一个这样的数组:
2012-02-18 18:22:46.338 Test[2758:fb03] myNewArray: (
{
receiver = mike;
sender = david;
message = "test1";
photo = "****************.jpg";
},
{
receiver = admin;
sender = david;
message = "test1";
photo = "****************.jpg";
}
)thx用于阅读
发布于 2012-02-19 01:50:20
NSArray是不可变的,你需要一个NSMutableArray。并且您在每个循环中重新初始化新数组,如果您想保留以前的值,则不能这样做。
NSMutableArray *a = [[NSMutableArray alloc] init];
for (int i = 0; i < [myArray count]; i++) {
NSDictionary *m = [myArray objectAtIndex:i];
if ([[m objectForKey:@"sender"] isEqualToString:@"david"]) {
[a addObject:m];
}
...
}发布于 2012-02-19 01:49:45
有一种更简单的方法。尝试使用NSArray的filteredArrayUsingPredicate:,在您的示例中,谓词类似于:
NSString *attribute = @"sender";
NSString *senderFilter = @"david";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K like %@", attribute, senderFilter];
NSArray *filteredArray = [array filteredArrayUsingPredicate:predicate];有关谓词的更多详细信息,请尝试Predicate Programming Guide。
发布于 2012-02-19 01:51:50
在循环之外声明myNewArray,并将其设置为NSMutableArray (它将允许添加新对象)
myNewArray = [[NSMutableArray alloc] array];
for(int i=0;i<[myArray count];i++)
{
...
}如果某个条件相等,则将对象添加到此数组中
NSLog(@"YES");
[myNewArray addObject:dict1];https://stackoverflow.com/questions/9343529
复制相似问题