zoukankan      html  css  js  c++  java
  • NSArray

    版权声明:本文为博主原创文章,未经博主允许不得转载。

    数组是一个元素有序、元素可重复的集合,在iOS编程中经常被用到,而Foundation框架提供了数组对象。数组对象包括不可修改的数组对象NSArray和可修改的数组对象NSMutableArray。

    一、NSArray的创建和初始化

    NSArray分别提供了类方法实例方法来创建NSArray,两种方法需要传入的参数基本相似,一般类方法以array开头,而实例方法则以init开头。

    类方法

    • 创建一个空数组:+ (id)array;

    • 创建具有一个元素的数组:+ (id)arrayWithObject:(id)anObject;

    • 创建包含多个元素的数组:+ (id)arrayWithObjects:(id)firstObject, ...;

    • 通过一个数组创建另一个数组:+ (id)arrayWithArray:(NSArray *)array;

    • 读取文件内容来创建数组: + (id)arrayWithContentsOfFile:(NSString *)path;

    • 读取URL内容来创建数组:+ (id)arrayWithContentsOfURL:(NSURL *)url;

    实例方法

    • 初始化具有一个元素的数组:- (id)initWithObject:(id)anObject;

    • 初始化包含多个元素的数组:- (id)initWithObjects:(id)firstObject, ...;

    • 通过一个数组初始化另一个数组:- (id)initWithArray:(NSArray *)array;

    • 读取文件内容来初始化数组:- (id)initWithContentsOfFile:(NSString *)path;

    • 读取URL内容来初始化数组:- (id)initWithContentsOfURL:(NSURL *)url;

    示例

    程序源代码

    #import <Foundation/Foundation.h>
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
            // 创建空数组
            NSArray *arr1 = [NSArray array];
            // 输出空
            NSLog(@"arr1中包含的元素为:%@", arr1);
            
            // 创建具有一个元素的数组
            NSArray *arr2 = [NSArray arrayWithObject:@"apple"];
            // 输出arr2中的内容为:apple
            NSLog(@"arr2中包含的元素为:%@", arr2);
            
            // 创建包含多个元素的数组
            NSArray *arr3 = [NSArray arrayWithObjects:@"apple", @"banana", @"orange", nil];
            // 输出arr3中的内容为:apple,banana,orange
            NSLog(@"arr3中包含的元素为:%@", arr3);
            
            // 通过一个数组创建另一个数组
            NSArray *arr4 = [NSArray arrayWithArray:arr3];
            // 输出arr4中的内容为:apple,banana,orange
            NSLog(@"arr4中包含的元素为:%@", arr4);
            
            // 读取文件内容来创建数组,注意:该文件需要保存在桌面上,并根据自己电脑的用户更改路径"chao"
            NSArray *arr5 = [NSArray arrayWithContentsOfFile:@"/Users/chao/Desktop/myFile.txt"];
            NSLog(@"arr5中包含的元素为:%@", arr5);
        }
        return 0;
    }
    

    输出结果

    arr1中包含的元素为:(  
    )  
    arr2中包含的元素为:(  
    apple  
    )  
    arr3中包含的元素为:(  
    apple,  
    banana,  
    orange  
    )  
    arr4中包含的元素为:(  
    apple,  
    banana,  
    orange  
    )  
    arr5中包含的元素为:(  
    apple,  
    banana,  
    orange,  
    grape,  
    watermelon,  
    peach,  
    pear,  
    pitaya  
    )
    

    二、NSArray的操作

    • 判断数组是否包含某个指定元素:- (id)containsObject:(id)anObject;

    • 计算元素的个数:- (unsigned)count;

    • 获取首元素:- (id)firstObjectCommonWithArray:(NSArray *)otherArray;

    • 获取最后一个元素:- (id)lastObject;

    • 获取某个位置的数组元素:- (id)objectAtIndex:(unsigned)index;

    • 获取一系列的数组元素:- (id)objectsAtIndexs:(NSIndexSet *)set;

    • 在数组末尾添加元素:- (NSArray *)arrayByAddingObject:(id)anObject;

    • 在数组的末尾添加另一个数组的所有元素:- (NSArray *)arrayByAddingObjectsFromArray:(NSArray *)otherArray;

    • 提取数组中某个范围的元素来创建另一个数组:- (NSArray *)subarrayWithRange:(NSRange)range;

    • 比较两个数组中的元素是否相等:- (BOOL)isEqualToArray:(NSArray *)otherArray;

    • 返回元素所在的位置:- (unsigned)indexOfObject:(id)anObject;

    • 返回元素所在的位置:- (unsigned)indexOfObjectIdenticalTo:(id)anObject;

    • 把数组转换为字符串:- (NSString *)componentsJoinedByString:(NSString *)separator;

    • 字符串转换为数组:- (NSArray *)componentsSeparatedByString:(NSString *)separator;

    • 数组转换为数据对象:- (NSData *)sortedArrayHint;

    • 将数组的内容写入到文件中:- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;

    • 将数组的内容写入到URL中:- (BOOL)writeToURL:(NSURL *)url atomically:(BOOL)useAuxiliaryFile;

    示例

    程序源代码

    #import <Foundation/Foundation.h>
    
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
            NSString *str = @"banana";
            // 创建一个包含3个元素的数组
            NSArray *arr = [NSArray arrayWithObjects:@"apple", @"banana", @"orange", @"grape", @"watermelon",nil];
            // 判断数组中是否包含指定元素
            if ([arr containsObject:str] == YES) {
                NSLog(@"数组arr中包含%@这个元素", str);
            }
            else {
                NSLog(@"数组arr总不包含%@这个元素", str);
            }
            
            // 输出数组arr中的元素个数
            NSLog(@"数组arr中一共有%ld个元素", arr.count);
            
            // 输出数组arr中的首元素
            NSLog(@"数组arr中的首元素为:%@", [arr firstObjectCommonWithArray:arr]);
            
            // 输出数组arr中的最后一个元素
            NSLog(@"数组arr中的最后一个元素为:%@", [arr lastObject]);
            
            // 输出数组arr中第3个元素
            NSLog(@"数组arr中第3个元素为:%@", [arr objectAtIndex:2]);
            
            // 输出数组arr中从下标为1开始后面的2个元素
            NSLog(@"%@", [arr objectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, 2)]]);
            
            // 在数组arr的末尾添加元素"peach"后输出该数组
            NSLog(@"在数组arr末尾添加一个元素后arr为:%@", arr = [arr arrayByAddingObject:@"peach"]);
            
            NSArray *arr1 = [NSArray arrayWithObjects:@"pear", @"pitaya", nil];
            // 在数组arr的末尾添加另一个数组arr1的所有元素后,输出arr
            NSLog(@"arr的末尾添加另一个数组arr1的所有元素后arr为:%@", arr = [arr arrayByAddingObjectsFromArray:arr1]);
            
            // 提取arr数组中从下标6开始后的2个元素来创建另一个数组arr2,并输出arr2
            NSArray *arr2 = [arr subarrayWithRange:NSMakeRange(6, 2)];
            NSLog(@"arr2为:%@", arr2);
            
            // 比较arr1和arr2是否相等
            NSLog(@"arr1%@arr2", [arr1 isEqualToArray:arr2] == 1 ? @"等于" : @"不等于");
            
            // 返回元素"orange"在arr中的位置
            NSLog(@"orange在arr中的位置为:%ld", [arr indexOfObject:@"orange"]);
            
            // 返回元素"grape"在arr中的位置
            NSLog(@"grape在arr中的位置为:%ld", [arr indexOfObjectIdenticalTo:@"grape"]);
            
            // 把数组arr转换为字符串输出
            NSString *str2 = [arr componentsJoinedByString:@","];
            NSLog(@"数组arr转换为字符串后为:%@", str2);
            
            // 把字符串str2转换为数组arr3,并输出arr3
            NSArray *arr3 = [str2 componentsSeparatedByString:@","];
            NSLog(@"字符串str2转换为数组arr3后为:%@", arr3);
            
            // 把数组arr3转换为数据对象并输出
            NSData *arr3Data = [arr3 sortedArrayHint];
            NSLog(@"%@", arr3Data);
            
            // 把数组arr的内容写入到文件myFile1.plist中
            [arr writeToFile:@"/Users/chao/Desktop/myFile1.plist" atomically:YES];
            
            // 把数组arr的内容写入到URL中
            [arr writeToURL:[NSURL fileURLWithPath:@"/Users/chao/Desktop/myFile2.plist"] atomically:YES];
        }
        return 0;
    }
    

    输出结果

    数组arr中包含banana这个元素  
    数组arr中一共有5个元素  
    数组arr中的首元素为:apple  
    数组arr中的最后一个元素为:watermelon  
    数组arr中第3个元素为:orange  
    (  
    banana,  
    orange  
    )  
    在数组arr末尾添加一个元素后arr为:(  
    apple,  
    banana,  
    orange,  
    grape,  
    watermelon,  
    peach  
    )  
    arr的末尾添加另一个数组arr1的所有元素后arr为:(  
    apple,  
    banana,  
    orange,  
    grape,  
    watermelon,  
    peach,  
    pear,  
    pitaya  
    )  
    arr2为:(  
    pear,  
    pitaya  
    )  
    arr1等于arr2  
    orange在arr中的位置为:2  
    grape在arr中的位置为:3  
    数组arr转换为字符串后为:apple,banana,orange,grape,watermelon,peach,pear,pity  
    字符串str2转换为数组arr3后为:(  
    apple,  
    banana,  
    orange,  
    grape,  
    watermelon,  
    peach,  
    pear,  
    pitaya  
    )  
    <f79dc371 27a868cf 0260d3fc 94213fcf 48ad6e5c c60f2cc8 6c57c89e 0ef5d735> 
    

    三、NSMutableArray的创建和初始化

    NSMutableArray继承了NSArray,因此它可以作为NSArray使用。NSMutableArray代表了集合元素可以改变的集合,因此可以向该集合添加、删除、替换集合的元素。NSMutableArray的创建和初始化方法与NSArray基本相同,不过它多了以下方法。

    • 创建一个可变数组,并且为此数组分配固定大小的内存长度:+ (id)arrayWithCapacity:(unsigned)numItems;
    • 初始化一个具有固定长度的可变数组:-(id)initWithCapacity:(unsigned)numItems;

    四、NSMutableArray的操作

    NSMutableArray相对NSArray主要新增了如下几个方面的方法:

    • 增加集合元素的方法:这类方法以add开头。
    • 删除集合元素的方法:这类方法以remove开头。
    • 替换元素的方法:这类方法以replace开头。
    • 对集合元素排序的方法:这类方法以sort开头。
    • 插入新元素的方法:这类方法以insert开头。

    下面是这几类方法声明:

    • 向数组末尾增加元素:- (void)addObject:(id)anObject;

    • 用可变数组来创建可变数组:- (void)addObjectsFromArray:(NSArray *)otherArray;

    • 删除指定的元素:- (void)removeObject:(id)anObject;

    • 删除可变数组中的所有元素:- (void)removeAllObjects;

    • 删除可变数组中最后一个元素:- (void)removeLastObject;

    • 删除可变数组中指定位置处的元素:- (void)removeObjectAtIndex:(unsigned)index;

    • 删除可变数组中某一位置或某一范围的数组元素:- (void)removeObjectsAtIndex:(NSIndexSet *)set;

    • 删除某个范围内的元素:- (void)removeObjectsInRange:(NSRange)range;

    • 删除与另一个数组中相同的元素:- (void)removeObjectsInArray:(NSArray *)otherArray;

    • 替换可变数组中某一位置的元素:- (void)replaceObjectAtIndex:(unsigned)index withObject:(id)anObject;

    • 替换可变数组中多个元素:- (void)replaceObjectsAtIndexs:(NSIndexSet *)set withObjects:(NSArray *)otherArray;

    • 替换某一范围内的元素:- (void)replaceObjectsInRange:(NSRange)range withObjectsFromArray:(NSArray *)otherArray;

    • 在某一位置插入数组元素:- (void)insertObject:(id)anObject atIndex:(unsigned)index;

    • 在某一位置或范围插入另一个数组元素:- (void)insertObjects:(NSArray *)otherArray atIndexs:(NSIndexSet *)set;

    • 交换数组中两个数组元素的位置:- (void)exchangeObjectAtIndex:(unsigned)idx1 withObjectAtIndex:(unsigned)idx2;

    • 对可变数组中的元素进行重新设置:- (void)setArray:(NSArray *)otherArray;

  • 相关阅读:
    Cocos2d-x 3.0 屏幕触摸及消息分发机制
    stretchableImageWithLeftCapWidth气泡拉伸
    海量数据插入数据库效率对照測试 ---ADO.NET下SqlBulkCopy()对照LINQ 下InsertAllOnSubmit()
    银联+移动+三星PK微信、余额宝
    热力学三大定律与熵
    热力学三大定律与熵
    OpenGL(六) gluLookAt和gluPerspective函数解析
    特殊字符
    特殊字符
    函数的功能
  • 原文地址:https://www.cnblogs.com/weixiaochao/p/6213204.html
Copyright © 2011-2022 走看看