我有一系列字典.
我想基于密钥过滤数组.
我试过这个:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(SPORT == %@)", @"Football"];
NSArray *filteredArray = [data filteredArrayUsingPredicate:predicate];
Run Code Online (Sandbox Code Playgroud)
这不起作用,我没有结果.我想我做错了什么.我知道如果"SPORT"是一个ivar,这就是方法.我认为如果它是关键的话可能会有所不同.
然而,我无法找到一个例子.
谢谢
更新
我在我正在搜索的字符串周围添加了引号.
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(SPORT == '%@')", @"Football"];
Run Code Online (Sandbox Code Playgroud)
它仍然无法正常工作.
更新2
解决了它.我实际上不得不删除单引号,这似乎与指南所说的相反.
我真正的问题是我有一个嵌套数组,我实际上并没有评估字典.骨头移动.
我有一个NSArray,我想使用NSPredicate过滤掉某些对象,我希望我可以使用NOT IN,因为我看到我可以很容易地进行IN.
所以我有我的阵列:
self.categoriesList
Run Code Online (Sandbox Code Playgroud)
然后我得到了我想删除的值:
NSArray *parentIDs = [self.cateoriesList valueForKeyPath:@"@distinctUnionOfObjects.ParentCategoryID"];
Run Code Online (Sandbox Code Playgroud)
这给了我一个我不想显示的类别的ParentCategoryID列表,所以我想我可以使用NSPredicate来删除它们:
self.cateoriesList = [self.cateoriesList filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"CategoryID NOT IN %@",parentIDs]];
Run Code Online (Sandbox Code Playgroud)
这失败了:
reason: 'Unable to parse the format string "CategoryID NOT IN %@"'
Run Code Online (Sandbox Code Playgroud)
如果我想使用IN,那当然是完美的.
是否有可能将特定的所有密钥NSDictionary作为单独的密钥NSArray?
我最近一直在使用enumerateObjectsUsingBlock:很多我的快速枚举需求,而且我很难理解BOOL *stop枚举块中的用法.
在NSArray类引用状态
stop:对布尔值的引用.该块可以将值设置YES为停止进一步处理数组.这个stop论点是一个唯一的论点.您应该只将此布尔值设置YES为块内.
那么当然我可以在我的块中添加以下内容来停止枚举:
if (idx == [myArray indexOfObject:[myArray lastObject]]) {
*stop = YES;
}
Run Code Online (Sandbox Code Playgroud)
从我能够说的,没有明确设置*stop到YES没有任何负面的副作用.枚举似乎在数组的末尾自动停止.那么*stop在一个区块中使用真的有必要吗?
cocoa-touch enumeration objective-c nsarray fast-enumeration
存储c结构的常用方法是NSArray什么?优点,缺点,内存处理?
值得注意的是,有什么之间的区别valueWithBytes和valueWithPointer -由Justin和鲶鱼下面提出.
这是 Apple valueWithBytes:objCType:对未来读者讨论的链接 ......
对于一些横向思考和更多关注性能,Evgen提出了STL::vector在C++中使用的问题.
(这引发了一个有趣的问题:是否有一个快速的c库,不是STL::vector很轻,但更轻,允许最小的"整理数组处理"......?)
那么原来的问题......
例如:
typedef struct _Megapoint {
float w,x,y,z;
} Megapoint;
Run Code Online (Sandbox Code Playgroud)
那么:在一个NSArray成语中存储一个人自己的结构的正常,最好,惯用的方式是什么?你如何处理那个成语中的记忆?
请注意,我特意寻找存储结构的通常习惯用法.当然,人们可以通过创建一个新的小班来避免这个问题.但是,我想知道实际将结构放入数组的常用习惯,谢谢.
顺便说一句,这可能是NSData的方法吗?不是最好的......
Megapoint p;
NSArray *a = [NSArray arrayWithObjects:
[NSData dataWithBytes:&p length:sizeof(Megapoint)],
[NSData dataWithBytes:&p length:sizeof(Megapoint)],
[NSData dataWithBytes:&p length:sizeof(Megapoint)],
nil];
Run Code Online (Sandbox Code Playgroud)
BTW作为参考点,感谢Jarret Hardie,以下是如何存储CGPoints和类似的NSArray:
NSArray *points = [NSArray arrayWithObjects:
[NSValue valueWithCGPoint:CGPointMake(6.9, 6.9)],
[NSValue valueWithCGPoint:CGPointMake(6.9, 6.9)],
nil];
Run Code Online (Sandbox Code Playgroud)
我有一个NSArray包含这样的日期字符串(即NSString):"星期四,2009年5月21日19:10:09 -0700"
我需要NSArray按日期排序.我考虑过首先将日期字符串转换为NSDate对象,但是如何按NSDate对象排序则会陷入困境.
谢谢.
我正在使用iPhone SDK(3.0),我正在尝试创建一个选择器数组,以在一个类中调用各种方法.
显然,我做错了(我认为@selector不被认为是一个类,因此将它们填充到NSArray中是行不通的).
我试过这个,但这显然是错的.
有一个简单的方法来拥有这样的选择器数组吗?或者是否有更好的方法来迭代一组方法?
selectors = [NSArray arrayWithObjects:
@selector(method1),
@selector(method2),
@selector(method3),
@selector(method4),
@selector(method5),
@selector(method6),
@selector(method7), nil];
for (int i = 0; i < [selectors count]; i++) {
if ([self performSelector:[selectors objectAtIndex:i]]) // do stuff;
}
Run Code Online (Sandbox Code Playgroud) 我有一个包含一堆字符串的数组,我想检查数组中是否包含某个字符串.如果我containsObject在数组上使用:message,我会得到正确的结果.NSString具有相同字符串的所有对象是否指向同一对象?或者为什么containsObject:工作?
NSArray *stringArray = [NSArray arrayWithObjects:@"1",@"2",@"3",anotherStringValue, nil];
if([stringArray containsObject:@"2"]){
//DO SOMETHING
}
Run Code Online (Sandbox Code Playgroud) 假设我有这段代码:
class Stat {
var statEvents : [StatEvents] = []
}
struct StatEvents {
var name: String
var date: String
var hours: Int
}
var currentStat = Stat()
currentStat.statEvents = [
StatEvents(name: "lunch", date: "01-01-2015", hours: 1),
StatEvents(name: "dinner", date: "01-01-2015", hours: 1),
StatEvents(name: "dinner", date: "01-01-2015", hours: 1),
StatEvents(name: "lunch", date: "01-01-2015", hours: 1),
StatEvents(name: "dinner", date: "01-01-2015", hours: 1)
]
var filteredArray1 : [StatEvents] = []
var filteredArray2 : [StatEvents] = []
Run Code Online (Sandbox Code Playgroud)
我可以手动调用下一个函数,以便有两个按"同名"分组的数组.
filteredArray1 = currentStat.statEvents.filter({$0.name == "dinner"}) …Run Code Online (Sandbox Code Playgroud) 我在排序数组wrt数据库时遇到问题:
NSSortDescriptor *sorter = [[NSSortDescriptor alloc] initWithKey:@"w" ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObject: sorter];
[mGlossaryArray sortUsingDescriptors:sortDescriptors];
[sorter release];
Run Code Online (Sandbox Code Playgroud)
在数据库中有一些第一个大写字母,因为大写字母它没有显示我正确的排序输出.这里我用rt"w"排序一个数组,这是我在数据库中的表列.在这里,我附加了输出的屏幕截图,其中"癌症"首先出现在"c"之后,但这不正确,因为大写单词而没有按字母顺序排序.
例如.如果小写中有"able"和"aCid"那么它将首先显示aCid然后能够显示aCid,并且还存在如果第一个字母是大写字母它首先出现的情况,例如"Able"和"a".在这里Able首先显示.
nsarray ×10
objective-c ×7
cocoa ×4
ios ×3
iphone ×2
nsdictionary ×2
nspredicate ×2
sorting ×2
arrays ×1
cocoa-touch ×1
enumeration ×1
nsdate ×1
nsstring ×1
selector ×1
struct ×1
swift ×1