热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

iOS判断数组array中是否包含元素a,取出a在array中的下标+数组方法详解

目前找到来4个解决办法,第三个尤为简单方便1111111NSArray*arr@[@1,@2,@3,@4,@5];是否包含

 

 

目前找到来4个解决办法,第三个尤为简单方便

/////////1111111

NSArray
* arr = @[@"1",@"2",@"3",@"4",@"5"];
//是否包含
if ([arr containsObject:@"3"]) {

NSInteger index
= [arr indexOfObject:@"3"];
NSLog(
@"-1---%ld---",index);
}

//输出是 2



//////////22222222

if ([arr indexOfObject:@"5"] != NSNotFound) {

NSInteger inde
=[arr indexOfObject:@"5"] ;
NSLog(
@"-2---%ld----",inde);

}
else{

NSLog(
@"不存在");
}


//////22222---->>>>3333333

NSInteger inde
=[arr indexOfObject:@"5"];

if (inde != NSNotFound) {

NSLog(
@"-2---%ld----",inde);

}
else{

NSLog(
@"不存在");
}


///////44444 用for in 来判断

 

数组详细方法一

下面的例子以 
NSArray
*array = [NSArray arrayWithObjects:@"wendy",@"andy",@"tom",@"jonery",@"stany", nil];
1、获取数组中总共有多少个对象。
- (NSUInteger)count;
NSLog(
@"%d",[array count]); 2
2、获取数组中下标对应的元素对象.(下标是从0开始)
- (id)objectAtIndex:(NSUInteger)index;

3、在当前数据中追加一个新的对象,并且返回一个新的数据对象(新的数组对象和被追加的对象,是两个不同的数组对象)。
- (NSArray *)arrayByAddingObject:(id)anObject;
4、在当前的数组中追加一个新的数据,并且返回一个新的数组对象。
- (NSArray *)arrayByAddingObjectsFromArray:(NSArray *)otherArray;
5、使用当前的数组生成一个字符串,新生成的字符串使用提供的separator 字符进行分割。
- (NSString *)componentsJoinedByString:(NSString *)separator;
[array compontsJoinedByString:
@","];
运行结果: wendy,andy,tom,jonery,stany
6、检测数据中是否包含指定的对象元素
- (BOOL)containsObject:(id)anObject;
[array containsObject:
@"tom"]; YES
7、使用当前的数组生成字符串。可以重写description 改变生成的字符串。相当于Java 中的toString 方法。
- (NSString *)description;
运行结果
(
wendy,
andy,
tom,
jonery,
stany
)
8、根据设置的locale 进行连接数组
- (NSString *)descriptionWithLocale:(id)locale;


- (NSString *)descriptionWithLocale:(id)locale indent:(NSUInteger)level;


9、两个数组的第一个元素是否相同,如果相同,则返回 数组中,第一个元素的字符串,反之,返回null 对象
- (id)firstObjectCommonWithArray:(NSArray *)otherArray;
10、 从数组中获取 NSRange 对象的数据存放到objects 中,NSRange 的数据标示从location,开始后面length 个数据
- (void)getObjects:(id__unsafe_unretained [])objects range:(NSRange)range;


NSArray
*array = [NSArray arrayWithObjects:@"wendy",@"andy",@"tom",@"jonery",@"stany",@"张山名称",@"asdta", nil];

NSRange range
= NSMakeRange(1, 5);

id *objects;

objects
= malloc(sizeof(id) * range.length);

[array getObjects:objects range:range];

for(int i = 0; i ){
NSLog(@"%@",objects[i]);
}

free(objects);

运行的结果

andy
tom
jonery
stany
11、 判断制定的anObject 对象是否存在数组中如果存在返回,对象所在的下标
- (NSUInteger)indexOfObject:(id)anObject;
如果不存在,返回的NSUInteger 与 NSNotFund 相同
NSUIndex index
= [array indexOfObject:@"stan"];
if(index == NSNotFound)
{
对象不在数组中
}

11-1、 判断制定的元素,是否在数组中,数组查询的位置,是从range.location 的位置开始,到range.length 的长度结束。
- (NSUInteger)indexOfObject:(id)anObject inRange:(NSRange)range;
如果数据存在,返回指定的下标,如果不存在,则返回NSNotFund 。
实质是使用isEqual 进行比较


12
同上面两个方法一项,测试指定的对象是否在数组中不同的是,这里使用指针进行比较
- (NSUInteger)indexOfObjectIdenticalTo:(id)anObject;
如果数据存在,返回指定的下标,如果不存在,则返回NSNotFund 。
- (NSUInteger)indexOfObjectIdenticalTo:(id)anObject inRange:(NSRange)range;


13、比较两个数组是否相同 ,数组长度相同,并且相同位置上的元素也相同。
- (BOOL)isEqualToArray:(NSArray *)otherArray;
14、返回最有一个元素,如果一个数组的长度为0 返回的对象为nil
- (id)lastObject;
15、使用数组返回一个 NSEnumerator 对象,这个对象类似与一个指针,可以用来遍历 整个数组 指针从前向后遍历
- (NSEnumerator *)objectEnumerator;
示例如下
NSEnumerator
*enu = [array objectEnumerator];

id *obj;
while (obj = enu.nextObject) {
NSLog(
@"obj===%@==",obj);
}
16、 返回一个NSEnumerator 对象,这个对象类似一个指针,可以用来遍历真个数据,所不同的是,这个指针,是从后向前遍历。
- (NSEnumerator *)reverseObjectEnumerator;
17、生成一个NSData 的对象,主要是用来进行数组的排序。 在下面的方法中使用这个对象
- (NSData *)sortedArrayHint;
18、 进行数组的排序
- (NSArray *)sortedArrayUsingFunction:(NSInteger (*)(id,id, void *))comparator context:(void *)context;
这个方法类似苹果实现了一个简单的 排序方法。但是实现的规则需要自己进行处理。
类似的方法如下。 首先提供一个 普通的排序算法,函数和c 的方法类似
NSInteger sortType(
id st,id str,void *cha)
{
NSString
*s1 = (NSString *)st;
NSString
*s2 = (NSString *)str;


if(s1.length > s2.length)
{
return NSOrderedAscending;
}
else if(s1.length < s2.length)
{
return NSOrderedDescending;
}

return NSOrderedSame;
}


NSArray
*array = [NSArray arrayWithObjects:@"wendy",@"andy",@"tom",@"test", nil];

NSArray
*a = [array sortedArrayUsingFunction:sortType context:nil];

NSLog(
@"a=%@",a);
NSArray 为需要排序的数组,返回一个排序完成的数组,再执行osrtedArrayUseingFunction 方法时会,会自动调用上面的sortType 方法,并且,可以按照你
的需要调整上面的规则


19、和上面的方法类似,也是苹果用来进行排序的。所不同的是,需要传入一个NSData 的数据。
- (NSArray *)sortedArrayUsingFunction:(NSInteger (*)(id,id, void *))comparator context:(void *)context hint:(NSData *)hint;


NSData
*dat = [array sortedArrayHint];
NSArray
*a = [array sortedArrayUsingFunction:sortType context:nil hint:dat];

NSLog(
@"a=%@",a);
数组详细方法:数组是否相同,排序。。。

 

数组详细方法二:遍历,数组与数组

20、   - (NSArray *)sortedArrayUsingSelector:(SEL)comparator;
这是用来排序的函数,comparator 这个参数,需要传入一个返回结果是NSComparisonResult 的函数,
主要的函数,类似的函数如下:
- (NSComparisonResult)compare:(NSString *)string;
- (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask;
- (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask range:(NSRange)compareRange;
- (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask range:(NSRange)compareRange locale:(id)locale;
- (NSComparisonResult)caseInsensitiveCompare:(NSString *)string;
- (NSComparisonResult)localizedCompare:(NSString *)string;
- (NSComparisonResult)localizedCaseInsensitiveCompare:(NSString *)string;
都可以进行调用
以 localizedCompare: 函数为例进行调用


NSArray
*arr = [[NSArray alloc] initWithObjects:@"test", @"abc", @"xyz", nil];
NSLog(
@"Befor sort:%@", arr);
SEL sel
= @selector(localizedCompare:);
arr
= [arr sortedArrayUsingSelector:sel];
NSLog(
@"After sort:%@", arr);
得到的结果是:
abc,
test,
xyz


21、用来获取数组中range.location 开始,数据各数 为range.length 的数据,并放置到一个新的数组中
以数组 为例
NSArray
*array = [NSArray arrayWithObjects:@"wendy",@"andy",@"tom",@"test", nil];
- (NSArray *)subarrayWithRange:(NSRange)range;
如:
NSArray
*test = [array subarrayWithRange:NSMakeRange(2, 2)];
tom,
test
注意range 的数值不要越界。
22、写入数组中的数据,到指定path 的目录中:
参数:atomically 是否把文件保存到辅助文件中
- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;




23、如同上面的方法一样,所不同的是写入数组中的内容到 网上指定的路径。
- (BOOL)writeToURL:(NSURL *)url atomically:(BOOL)atomically;




24、这个方法的实现类似于,数组中的元素,都是类对象,aselector 是这些类中的无参方法。
- (void)makeObjectsPerformSelector:(SEL)aSelector;
调用例子如下:
首先新建一个ObjectTest 的类,在其中实现一个 无参数方法
- (void)tttttt
在这个方法的实现中可以打印一些日志
- (void)tttttt
{
NSLog(
@"==========asasdfasdfasdfas===========");
}




NSArray
*array = [NSArray arrayWithObjects:[[[ObjectTest alloc] init] autorelease],[[[ObjectTest alloc] init] autorelease], nil];

调用格式如下,
[array makeObjectsPerformSelector:@selector(tttttt)];

这时就可以看到打印的日志信息了。
25、这个方法的调用和上面一个方法类似,所不同的是这个对象调用的方法是一个可以带参数的方法。参数的类型是id ,也就是可以是任意的类型。
- (void)makeObjectsPerformSelector:(SEL)aSelector withObject:(id)argument;


26、 用来根据indexes 获取一个数组, NSIndexSet 是一个用来管理 index 的对象。
- (NSArray *)objectsAtIndexes:(NSIndexSet *)indexes;


例子如下:
NSArray
*array = [NSArray arrayWithObjects:@"wendy",@"andy",@"tom",@"test", nil];

//NSIndexSet *se = [NSIndexSet indexSetWithIndex:0];
或者是
NSIndexSet
*se = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(2, 2)];

NSArray
*test = [array objectsAtIndexes:se];
NSLog(
@"%@",test);


27、返回指定下标的一个对象。这个方法类似 objectAtIndex:
- (id)objectAtIndexedSubscript:(NSUInteger)idx


28、使用block 块遍历整个数组。这个block 需要三个参数,id obj 表示数组中的元素。
NSUInteger idx 标示元素的下标,
bool *stop 是一个bool类型的参数。 官方描述如下:
A reference to a Boolean value. The block can
set the value to YES to stop further processing of the array.
The stop argument
is an out-only argument. You should only ever set this Boolean to YES within the Block.
- (void)enumerateObjectsUsingBlock:(void (^)(id obj, NSUInteger idx,BOOL *stop))block
调用例子如:


NSArray
*array = [NSArray arrayWithObjects:@"wendy",@"andy",@"tom",@"test", nil];


[array enumerateObjectsUsingBlock:
^(id str,NSUInteger index, BOOL* te){
NSLog(
@"%@,%d",str,index);
}];
29、同上面的方法一项,区别在于,这里多添加了一个参数,用来标示 是从前向后遍历,还是从后往前遍历。
- (void)enumerateObjectsWithOptions:(NSEnumerationOptions)opts usingBlock:(void (^)(id obj, NSUInteger idx,BOOL *stop))block
调用例子如下:
NSArray
*array = [NSArray arrayWithObjects:@"wendy",@"andy",@"tom",@"test", nil];


[array enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:
^(id str,NSUInteger index, BOOL* te){
NSLog(
@"%@,%d",str,index);
}];
30、 同上面的方法一项,不过NSIndexSet 参数标示,根据下标取出的数组,这里真正在block 中遍历的数组,是根据NSindexSet 取到的子数组
- (void)enumerateObjectsAtIndexes:(NSIndexSet *)s options:(NSEnumerationOptions)opts usingBlock:(void (^)(id obj, NSUInteger idx,BOOL *stop))block
调用如下:
[array enumerateObjectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(
1, 3)] options:NSEnumerationReverse usingBlock:^(id str,NSUInteger index, BOOL* te){
NSLog(
@"%@,%d",str,index);
}];
31、 根据条件用来获取一个NSUIndex 对象,主要是根据条件进行数据遍历使用
- (NSUInteger)indexOfObjectPassingTest:(BOOL (^)(id obj, NSUInteger idx,BOOL *stop))predicate

调用如下:
NSInteger index
= [array indexOfObjectPassingTest:^ BOOL (id tr,NSUInteger index, BOOL *te){
NSString
*s = (NSString *)tr;
if([@"wendy" isEqualToString:s])
{
return YES;
}
return NO;
}];

NSLog(
@"index==%d=.",index);
32、同上面的方法相同,却别在于,这里添加了一个参数,用来表示遍历是从前向后遍历还是从后遍历。
- (NSUInteger)indexOfObjectWithOptions:(NSEnumerationOptions)opts passingTest:(BOOL (^)(id obj, NSUInteger idx,BOOL *stop))predicate


33、这个添加了参数NSIntexSet 参数,用来获取子数组,然后使用这个子数组进行遍历,处理数据
- (NSUInteger)indexOfObjectAtIndexes:(NSIndexSet *)s options:(NSEnumerationOptions)opts passingTest:(BOOL (^)(id obj, NSUInteger idx,BOOL *stop))predicate


31、 根据block 的处理获取一个NSIndexSet 对象。
- (NSIndexSet *)indexesOfObjectsPassingTest:(BOOL (^)(id obj, NSUInteger idx,BOOL *stop))predicate
调用如下:
NSIndexSet
*index = [array indexesOfObjectsPassingTest: ^ BOOL (id tr, NSUInteger index,BOOL *te){

NSString
*s = (NSString *)tr;
if([s isEqualToString:@"andy"]){
return YES;
}
return NO;
}];


NSLog(
@"%@",index);
33 、 这个方法添加了参数,用来表示,是从前向后,遍历还是从后向前遍历
- (NSIndexSet *)indexesOfObjectsWithOptions:(NSEnumerationOptions)opts passingTest:(BOOL (^)(id obj, NSUInteger idx,BOOL *stop))predicate NS_AVAILABLE(10_6,4_0);


调用示例如下:
NSIndexSet
*index = [array indexesOfObjectsWithOptions:NSEnumerationReverse passingTest: ^ BOOL (id tr, NSUInteger index,BOOL *te){

NSString
*s = (NSString *)tr;
if([s isEqualToString:@"andy"]){
return YES;
}
return NO;
}];


NSLog(
@"%@",index);


34、 添加参数NSIndexSet 用来获取子数组,使用子数组进行遍历
- (NSIndexSet *)indexesOfObjectsAtIndexes:(NSIndexSet *)s options:(NSEnumerationOptions)opts passingTest:(BOOL (^)(id obj, NSUInteger idx,BOOL *stop))predicate


35、对数组进行排序操作 参数cmptr 是一个block 函数块,返回的数据类型是一个NSComparisonResult 对象
- (NSArray *)sortedArrayUsingComparator:(NSComparator)cmptr


调用例子如下:
NSArray
*te = [array sortedArrayUsingComparator:^ NSComparisonResult (NSString *s,NSString *s2){
if(s.length < s2.length){
return NSOrderedAscending;
}
if(s.length > s2.length){
return NSOrderedDescending;
}

return NSOrderedSame;
}];

NSLog(
@"te=%@.",te);
36、进行排序操作,NSSortOptions 排序的参数 用来表示是同时排序,还是稳定执行。
- (NSArray *)sortedArrayWithOptions:(NSSortOptions)opts usingComparator:(NSComparator)cmptr NS_AVAILABLE(10_6,4_0);

NSArray
*test = [array sortedArrayWithOptions:NSSortStable usingComparator:^ NSComparisonResult (NSString *s,NSString *s2){

if(s.length < s2.length){
return NSOrderedAscending;
}
if(s.length > s2.length){
return NSOrderedDescending;
}

return NSOrderedSame;
}];

NSLog(
@"%@",test);
NSArray二

 


推荐阅读
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了PhysioNet网站提供的生理信号处理工具箱WFDB Toolbox for Matlab的安装和使用方法。通过下载并添加到Matlab路径中或直接在Matlab中输入相关内容,即可完成安装。该工具箱提供了一系列函数,可以方便地处理生理信号数据。详细的安装和使用方法可以参考本文内容。 ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 一次上线事故,30岁+的程序员踩坑经验之谈
    本文主要介绍了一位30岁+的程序员在一次上线事故中踩坑的经验之谈。文章提到了在双十一活动期间,作为一个在线医疗项目,他们进行了优惠折扣活动的升级改造。然而,在上线前的最后一天,由于大量数据请求,导致部分接口出现问题。作者通过部署两台opentsdb来解决问题,但读数据的opentsdb仍然经常假死。作者只能查询最近24小时的数据。这次事故给他带来了很多教训和经验。 ... [详细]
  • 本文介绍了使用数据库管理员用户执行onstat -l命令来监控GBase8s数据库的物理日志和逻辑日志的使用情况,并强调了对已使用的逻辑日志是否及时备份的重要性。同时提供了监控方法和注意事项。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有