从已经存在的 nsarray 构建 NSArray

发布于 2025-01-07 02:14:37 字数 2760 浏览 5 评论 0原文

我有一个 NSArray 和来自我的网络服务的 JsonValue 。

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";
    }
)

感谢阅读

i have an NSArray with JsonValue from my webservice.

myArray = [responseString JSONValue];

this Array give me that in a 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";
        }
    )

I need to create a new array with only sender = 'David'

i try with that:

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]);
       }
   }

this myNewArray give me that:

           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";
    }
)

But i need to have a array like that:

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 for reading

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

月隐月明月朦胧 2025-01-14 02:14:37

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];
    }
    ...
}

A NSArray is immutable, you will need a NSMutableArray. And you are re-initliazing the new array on every loop, which you cannot do if you want to keep the previous values.

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];
    }
    ...
}
你另情深 2025-01-14 02:14:37

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

myNewArray = [[NSMutableArray alloc] array];
for(int i=0;i<[myArray count];i++)
{
    ...
}

然后如果某些条件相等则将对象添加到该数组中

NSLog(@"YES");
[myNewArray addObject:dict1];

Declare myNewArray outside of the cycle, and make it a NSMutableArray (it'll allow to add new objects )

myNewArray = [[NSMutableArray alloc] array];
for(int i=0;i<[myArray count];i++)
{
    ...
}

then add object to this array if some condition is equal

NSLog(@"YES");
[myNewArray addObject:dict1];
那支青花 2025-01-14 02:14:37

有一个更简单的方法。尝试使用 NSArray 的 filteredArrayUsingPredicate: ,其中您的情况中的谓词如下所示:

NSString *attribute = @"sender";
NSString *senderFilter = @"david";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K like %@", attribute, senderFilter];

NSArray *filteredArray = [array filteredArrayUsingPredicate:predicate];

有关谓词的更多详细信息,请尝试 谓词编程指南

There's a much easier way. Try using NSArray's filteredArrayUsingPredicate: where the predicate in your case is something like this:

NSString *attribute = @"sender";
NSString *senderFilter = @"david";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K like %@", attribute, senderFilter];

NSArray *filteredArray = [array filteredArrayUsingPredicate:predicate];

For more details on predicates, try the Predicate Programming Guide.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文