Objective c 查找“的编号”;是”;在NSMutableArray中
假设我有如下NSMutableArrayObjective c 查找“的编号”;是”;在NSMutableArray中,objective-c,position,nsmutablearray,nsmutabledictionary,Objective C,Position,Nsmutablearray,Nsmutabledictionary,假设我有如下NSMutableArray ( { blockNumber = 1; boxId = 1; boxNumber = 4536; carId = 10; carNumber = 10; isDeleted = yes; }, { blockNumber = 2; boxId = 2; boxNumber
(
{
blockNumber = 1;
boxId = 1;
boxNumber = 4536;
carId = 10;
carNumber = 10;
isDeleted = yes;
},
{
blockNumber = 2;
boxId = 2;
boxNumber = 4537;
carId = 10;
carNumber = 10;
isDeleted = yes;
},
{
blockNumber = 3;
boxId = 3;
boxNumber = 4538;
carId = 10;
carNumber = 10;
isDeleted = no;
},
{
blockNumber = 4;
boxId = 4;
boxNumber = 4539;
carId = 10;
carNumber = 10;
isDeleted = no;
},
{
blockNumber = 5;
boxId = 5;
boxNumber = 4540;
carId = 10;
carNumber = 10;
isDeleted = no;
},
{
blockNumber = 6;
boxId = 6;
boxNumber = 4541;
carId = 10;
carNumber = 10;
isDeleted = no;
},
{
blockNumber = 7;
boxId = 7;
boxNumber = 4542;
carId = 10;
carNumber = 10;
isDeleted = no;
},
{
blockNumber = 8;
boxId = 8;
boxNumber = 4543;
carId = 10;
carNumber = 10;
isDeleted = no;
},
{
blockNumber = 9;
boxId = 9;
boxNumber = 4544;
carId = 10;
carNumber = 10;
isDeleted = no;
},
{
blockNumber = 10;
boxId = 10;
boxNumber = 4545;
carId = 10;
carNumber = 10;
isDeleted = no;
},
{
blockNumber = 11;
boxId = 11;
boxNumber = 4546;
carId = 10;
carNumber = 10;
isDeleted = no;
},
{
blockNumber = 12;
boxId = 12;
boxNumber = 4547;
carId = 10;
carNumber = 10;
isDeleted = no;
},
{
blockNumber = 13;
boxId = 13;
boxNumber = 4548;
carId = 10;
carNumber = 10;
isDeleted = no;
},
{
blockNumber = 14;
boxId = 14;
boxNumber = 4549;
carId = 10;
carNumber = 10;
isDeleted = no;
},
{
blockNumber = 15;
boxId = 15;
boxNumber = 4550;
carId = 10;
carNumber = 10;
isDeleted = no;
},
{
blockNumber = 16;
boxId = 16;
boxNumber = 4551;
carId = 10;
carNumber = 10;
isDeleted = no;
},
{
blockNumber = 17;
boxId = 17;
boxNumber = 4552;
carId = 10;
carNumber = 10;
isDeleted = no;
},
{
blockNumber = 18;
boxId = 18;
boxNumber = 4553;
carId = 10;
carNumber = 10;
isDeleted = no;
},
{
blockNumber = 19;
boxId = 19;
boxNumber = 4554;
carId = 10;
carNumber = 10;
isDeleted = no;
},
{
blockNumber = 20;
boxId = 20;
boxNumber = 4555;
carId = 10;
carNumber = 10;
isDeleted = no;
},
{
blockNumber = 21;
boxId = 21;
boxNumber = 4556;
carId = 10;
carNumber = 10;
isDeleted = no;
},
{
blockNumber = 22;
boxId = 22;
boxNumber = 4557;
carId = 10;
carNumber = 10;
isDeleted = no;
},
{
blockNumber = 23;
boxId = 23;
boxNumber = 4558;
carId = 10;
carNumber = 10;
isDeleted = no;
},
{
blockNumber = 24;
boxId = 24;
boxNumber = 4559;
carId = 10;
carNumber = 10;
isDeleted = no;
},
{
blockNumber = 25;
boxId = 25;
boxNumber = 4560;
carId = 10;
carNumber = 10;
isDeleted = no;
},
{
blockNumber = 26;
boxId = 26;
boxNumber = 4561;
carId = 10;
carNumber = 10;
isDeleted = no;
},
{
blockNumber = 27;
boxId = 27;
boxNumber = 4562;
carId = 10;
carNumber = 10;
isDeleted = no;
},
{
blockNumber = 28;
boxId = 28;
boxNumber = 4563;
carId = 10;
carNumber = 10;
isDeleted = no;
},
{
blockNumber = 29;
boxId = 29;
boxNumber = 4564;
carId = 10;
carNumber = 10;
isDeleted = no;
},
{
blockNumber = 30;
boxId = 30;
boxNumber = 4565;
carId = 10;
carNumber = 10;
isDeleted = yes;
}
)
我想要的是将成为我的号码isDeleted=yes
就我而言,是3。
我知道我可以像下面这样循环
for (NSMutableDictionary* aDict in carBoxesArray) {
if ([aDict[@"isDeleted"] isEqualToString:@"yes"]) {
findTotalYes++;
}
}
然而,我正在寻找任何其他方式(可能是一个班轮),这将给我什么我想要的
特别是我不想使用循环(因为我可以在数组中有更多的记录,这需要迭代时间)您可以使用
NSPredicate
NSArray *totalYes = [carBoxesArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(isDeleted == %@)", @"yes"]];
NSLog(@"Found Total YES: %d",totalYes.count);
您可以使用
NSPredicate
NSArray *totalYes = [carBoxesArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(isDeleted == %@)", @"yes"]];
NSLog(@"Found Total YES: %d",totalYes.count);
您可以在后台线程中使用循环,在主线程中使用一些加载程序。在这种情况下,当您执行循环时,显示不会冻结。您可以在后台线程中使用循环,并在主线程中使用一些加载程序。在这种情况下,执行循环时显示不会冻结。您也可以使用
NSCountedSet
:
NSCountedSet *countset = [NSCountedSet setWithArray:[carBoxesArray valueForKey:@"isDeleted"]];
NSInteger count = [countset countForObject:@"yes"];
当您要求一行时,将上述两行合并为一行:
NSInteger count = [[NSCountedSet setWithArray:[carBoxesArray valueForKey:@"isDeleted"]] countForObject:@"yes"];
您还可以使用
NSCountedSet
:
NSCountedSet *countset = [NSCountedSet setWithArray:[carBoxesArray valueForKey:@"isDeleted"]];
NSInteger count = [countset countForObject:@"yes"];
当您要求一行时,将上述两行合并为一行:
NSInteger count = [[NSCountedSet setWithArray:[carBoxesArray valueForKey:@"isDeleted"]] countForObject:@"yes"];
你也可以使用枚举 如下
__block int count = 0;
[carBoxesArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
if([[obj objectForKey:@"isDeleted"] isEqualToString:@"yes"])
count++;
}];
NSLog(@"%d",count);
你也可以使用枚举 如下
__block int count = 0;
[carBoxesArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
if([[obj objectForKey:@"isDeleted"] isEqualToString:@"yes"])
count++;
}];
NSLog(@"%d",count);
任何解决方案(显式循环、谓词、键值编码)都必须迭代所有元素。显式循环可能是最快的解决方案。任何解决方案(显式循环、谓词、键值编码)都必须迭代所有元素。显式循环可能是最快的解决方案。有关一些比较,请参见或。块枚举比快速枚举慢(略慢),请参见,例如……是的,我看到了,我发布了一个备选答案……:)块枚举比快速枚举(稍微)慢,请参见,例如,是的,我看到了,我发布了另一个答案…:)