在 const NSString *const[] 中查找 NSString
Find NSString in const NSString *const[]
我有一个 constants.h 文件并声明:
extern NSString * check_array_editable[];
在 constants.m 我设置:
NSString * check_array_editable[] = { @"1", @"2", @"3", @"4", @"5", @"6", @"7", @"9", @"11", @"14" , @"17", @"18", @"21" };
所以不必调用初始化程序,如果我使用 NSArray 而不是集合,我必须做什么。
现在我导入 constants.h 并且可以访问 check_array_editable[]。
但是我如何才能像使用 NSArray:
一样获得特定项目的长度和索引
BOOL isTheObjectThere = [check_array_editable containsObject: @"my string"];
NSUInteger indexOfTheObject = [check_array_editable indexOfObject: @"my string"];
---编辑
我最终决定使用 NSArray 并在 constants.h
中使用 inizalise void
NSArray * check_array_invisible;
NSArray * check_array_editable;
NSArray * check_array_texteingabe;
NSArray * check_array_assistent;
NSArray * check_array_functionfield;
+(void)initialize{
check_array_invisible = @[@10, @13, @34, @35];
check_array_editable = @[@1,@2, @3, @4, @5, @6, @7, @9, @11, @14 , @17, @18, @21 ];
check_array_texteingabe = @[@1, @2, @3, @9, @11, @14];
check_array_assistent = @[@16, @35];
check_array_functionfield = @[@32];
}
根据你的声明,你的数组是 C 样式数组,因此你将无法使用熟悉的方法,如 containsObject
和 indexOfObject
,但你应该将其作为 C 样式数组处理,并且像这样搜索
NSString *s = @"1";
int i = 0;
while(check_array_editable[i]) {
if( [check_array_editable[i] isEqualToString:s]) {
NSLog(@"yeah");
break;
}
i++;
}
相反,您可以在实现文件中这样声明数组:
#define check_array_editable@[@"1", @"2", @"3", @"4"]
现在您可以使用 indexOfObject
等有趣的方法
示例:
NSLog( @"%zd",[arrayOfStrings indexOfObject:@"2"]);
结果:
2015-07-16 11:04:47.620 PROJ[881:13857] 1
更多信息here , here and here
您可以使用 sizeof
来确定 C 数组中的元素数。取 sizeof
一个 C 数组:
sizeof(check_array_editable)
returns 所有元素的总大小(在您的示例中,答案是 104 [假设是 64 位二进制文件]);在您的情况下,每个元素都是一个 NSString *
,其大小由下式给出:
sizeof(NSSString *)
这将 return 8 [再次假设 64 位]。只需将总长度除以元素长度即可:
sizeof(check_array_editable) / sizeof(NSSString *)
你得到数组中元素的数量(在你的例子中是 13)。
重要:以上内容仅适用于声明为数组的变量。用 C 指针类型声明的变量,然后设置为引用动态分配的内存,可能可以用作数组,但它不是数组。取 sizeof
这样一个变量 return 它的大小 - 指针的大小 - 而不是它当前引用的大小。
HTH
我有一个 constants.h 文件并声明:
extern NSString * check_array_editable[];
在 constants.m 我设置:
NSString * check_array_editable[] = { @"1", @"2", @"3", @"4", @"5", @"6", @"7", @"9", @"11", @"14" , @"17", @"18", @"21" };
所以不必调用初始化程序,如果我使用 NSArray 而不是集合,我必须做什么。
现在我导入 constants.h 并且可以访问 check_array_editable[]。 但是我如何才能像使用 NSArray:
一样获得特定项目的长度和索引 BOOL isTheObjectThere = [check_array_editable containsObject: @"my string"];
NSUInteger indexOfTheObject = [check_array_editable indexOfObject: @"my string"];
---编辑 我最终决定使用 NSArray 并在 constants.h
中使用 inizalise voidNSArray * check_array_invisible;
NSArray * check_array_editable;
NSArray * check_array_texteingabe;
NSArray * check_array_assistent;
NSArray * check_array_functionfield;
+(void)initialize{
check_array_invisible = @[@10, @13, @34, @35];
check_array_editable = @[@1,@2, @3, @4, @5, @6, @7, @9, @11, @14 , @17, @18, @21 ];
check_array_texteingabe = @[@1, @2, @3, @9, @11, @14];
check_array_assistent = @[@16, @35];
check_array_functionfield = @[@32];
}
根据你的声明,你的数组是 C 样式数组,因此你将无法使用熟悉的方法,如 containsObject
和 indexOfObject
,但你应该将其作为 C 样式数组处理,并且像这样搜索
NSString *s = @"1";
int i = 0;
while(check_array_editable[i]) {
if( [check_array_editable[i] isEqualToString:s]) {
NSLog(@"yeah");
break;
}
i++;
}
相反,您可以在实现文件中这样声明数组:
#define check_array_editable@[@"1", @"2", @"3", @"4"]
现在您可以使用 indexOfObject
示例:
NSLog( @"%zd",[arrayOfStrings indexOfObject:@"2"]);
结果:
2015-07-16 11:04:47.620 PROJ[881:13857] 1
更多信息here , here and here
您可以使用 sizeof
来确定 C 数组中的元素数。取 sizeof
一个 C 数组:
sizeof(check_array_editable)
returns 所有元素的总大小(在您的示例中,答案是 104 [假设是 64 位二进制文件]);在您的情况下,每个元素都是一个 NSString *
,其大小由下式给出:
sizeof(NSSString *)
这将 return 8 [再次假设 64 位]。只需将总长度除以元素长度即可:
sizeof(check_array_editable) / sizeof(NSSString *)
你得到数组中元素的数量(在你的例子中是 13)。
重要:以上内容仅适用于声明为数组的变量。用 C 指针类型声明的变量,然后设置为引用动态分配的内存,可能可以用作数组,但它不是数组。取 sizeof
这样一个变量 return 它的大小 - 指针的大小 - 而不是它当前引用的大小。
HTH