首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从已存在的NSArray构建nsarray

从已存在的NSArray构建nsarray
EN

Stack Overflow用户
提问于 2012-02-19 01:42:04
回答 3查看 95关注 0票数 0

我从我的网络服务中得到了一个带有JsonValue的NSArray。

代码语言:javascript
复制
myArray = [responseString JSONValue];

这个数组在一个NSLog中给了我这个:

代码语言:javascript
复制
 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‘的新数组

我试着这样做:

代码语言:javascript
复制
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为我提供了以下功能:

代码语言:javascript
复制
           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";
    }
)

但是我需要一个这样的数组:

代码语言:javascript
复制
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用于阅读

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-19 01:50:20

NSArray是不可变的,你需要一个NSMutableArray。并且您在每个循环中重新初始化新数组,如果您想保留以前的值,则不能这样做。

代码语言:javascript
复制
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];
    }
    ...
}
票数 1
EN

Stack Overflow用户

发布于 2012-02-19 01:49:45

有一种更简单的方法。尝试使用NSArray的filteredArrayUsingPredicate:,在您的示例中,谓词类似于:

代码语言:javascript
复制
NSString *attribute = @"sender";
NSString *senderFilter = @"david";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K like %@", attribute, senderFilter];

NSArray *filteredArray = [array filteredArrayUsingPredicate:predicate];

有关谓词的更多详细信息,请尝试Predicate Programming Guide

票数 1
EN

Stack Overflow用户

发布于 2012-02-19 01:51:50

在循环之外声明myNewArray,并将其设置为NSMutableArray (它将允许添加新对象)

代码语言:javascript
复制
myNewArray = [[NSMutableArray alloc] array];
for(int i=0;i<[myArray count];i++)
{
    ...
}

如果某个条件相等,则将对象添加到此数组中

代码语言:javascript
复制
NSLog(@"YES");
[myNewArray addObject:dict1];
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9343529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档