精华内容
下载资源
问答
  • NSArray-Shuffle 用于混洗数组的 NSArray 类别。 方法 bjl_shuffledArray - ( NSArray *)bjl_shuffledArray 返回值 返回一个数组,其中所有元素都被随机排列。 bjl_shuffledArrayWithItemLimit: - ( NSArray *)...
  • 1. 数组的常用处理方式 //--------------------不可变数组 //1....NSString *s1 = @zhangsan; NSString *s2 = @lisi; NSString *s3 = @wangwu;...NSArray *array1 = [[NSArray ...NSArray *array2 = [NSArray arrayWithOb
  • 主要介绍了Objective-C中NSArray的基本用法示例,包括基本的排序等方法的介绍,需要的朋友可以参考下
  • NSArray

    2018-02-09 02:13:25
    使用注意 只能存放任意OC对象,有...NSArray *arr1 = [NSArray arrayWithObject:@"lalal"]; //nil是结束符号,也可以保存对象 NSArray *arr2 = [NSArray arrayWithObjects:@"lalal", @"...

    使用注意

    • 只能存放任意OC对象,有顺序
    • 是不可变的,一旦初始化完毕,内容固定,不能删除里面的元素,也不能添加
    • -

    创建方式

    NSArray *arr1 = [NSArray arrayWithObject:@"lalal"];
    //nil是结束符号,也可以保存对象
    NSArray *arr2 = [NSArray arrayWithObjects:@"lalal", @"hahaha", @"buyiyang", nil];
    //和上一句等价
    NSArray *arr3 = @[@"lalal", @"hahaha", @"buyiyang"];
    
    //返回数组长度
    [arr count];
    //获取数组最后一个元素
    [arr lastObject];
    //获取数组第一个元素
    [arr firstObject];
    //获取第3个元素
    [arr objectAtIndex:3];
    //获取元素简写和C语言差不多
    arr[3];
    
    //是否包含某个元素,返回BOOL值
    [arr containsObject:@"元素"];

    遍历

    1.C语言中常规遍历
    2.OC增强for循环遍历

    这里写图片描述

    NSArray *arr = @[@"lalal", @"hahaha", @"buyiyang"];
    for (NSString *str in arr) {
        NSLog(@"%@", str);
    }
    //输出为
    //NSArray[3837:670457] lalal
    //NSArray[3837:670457] hahaha
    //NSArray[3837:670457] buyiyang
    3.使用OC数组的迭代器来遍历

    这里写图片描述
    点回车
    这里写图片描述
    每取出一个元素就会调用一次block
    每次调用block都会讲当前取出的元素和元素对应的索引传递出来
    stop用于控制什么时候停止遍历
    这里写图片描述

    4.给数组中的对象发送消息

    这里写图片描述

    NSArray *arr = @[p1, p2, p3 ,p4];
    //如果使用OC数组存储对象,可以调用OC数组的方法让数组中所有元素都执行指定方法
    //注意:如果数组中保存的不是相同类型的数据,没有相同的办法,就会报错
    //[arr makeObjectsPerformSelector:@selector(funName)];
    [arr makeObjectsPerformSelector:@selector(funName:) withObject:@"blablabla"];

    数组排序

    这里写图片描述

    NSArray *arr = @[@10, @20, @30, @8];
    //注意:想使用compare方法对数组中的元素进行排序,那么数组中的元素必须是Foundation框架中的对象
    NSArray *newArr = [arr sortedArrayUsingSelector:@selector(compare:)];
    NSLog(@"%@", newArr);

    这里写图片描述

    //自定义类元素成员变量排序·
    Person *p1 = [[Person alloc] init];
    p1.age = 10;
    Person *p2 = [[Person alloc] init];
    p2.age = 20;
    Person *p3 = [[Person alloc] init];
    p3.age = 4;
    Person *p4 = [[Person alloc] init];
    p4.age = 13;
    NSArray *arr = @[p1, p2, p3, p4];
    NSArray *newArr = [arr sortedArrayUsingComparator:^NSComparisonResult(Person  * _Nonnull obj1, Person   * _Nonnull obj2) {
    //每次调用该block都会取出数组中的两个元素
    //二分
    //大于小于号用来调整排序顺序
        return obj1.age > obj2.age;
    }];
    NSLog(@"%@", newArr);

    该方法
    这里写图片描述
    点击回车,block点击回车都会出现代码
    这里写图片描述


    NSArray和NSString转换

    //将数组中的元素用-连接起来
    NSArray *arr = @[@"aa", @"bb", @"cc"];
    NSString *str = [arr componentsJoinedByString:@"-"];
    NSLog(@"%@", str);

    这里写图片描述
    这里写图片描述

    //通过字符串生成一个数组
    NSString *str = @"aa-bb-cc";
    NSArray *arr = [str componentsSeparatedByString:@"-"];
    NSLog(@"%@", arr);

    这里写图片描述


    NSArray文件读写

    1.将数组写入文件中

    通常保存为.plist文件
    这里写图片描述

    NSArray *arr = @[@"aa", @"bb", @"cc"];
    //1.将数组写入文件中
    //数组写入文件其实是一个XML
    //在iOS开发中一般情况下将XML保存为.plist
    BOOL flag = [arr writeToFile:@"/Users/y1shichanganluan/Desktop/abc.plist" atomically:YES];

    2.从文件中读取一个数组

    这里写图片描述

    //2.从文件中读取一个数组
    //arrayWithContentsOfFile只能写入数组中保存的Foundation框架中创建的而对象,如果是自定义对象则不能写入
    NSArray *arr = [NSArray arrayWithContentsOfFile:@"/Users/y1shichanganluan/Desktop/abc.plist"];
    NSLog(@"%@",arr);

    NSMutableArray

    1.创建空数组
    NSMutableArray *arr = [NSMutableArray array];
    2.创建固定长度的空数组
    //数组长度为4
    NSMutableArray *arr = [[NSMutableArray alloc] initWithCapacity:4]
    3.创建数组包含元素,由父类NSArray继承
    NSMutableArray *arr = [NSMutableArray arrayWithObjects:@"lalal", @"hahaha", nil];
    4.添加

    这里写图片描述

    [arr addObject:@"hehehhe"];
    //将数组中的元素取出再添加
    [arr addObjectsFromArray:@[@"ajdsfasd", @"asdfsd"]];
    5.插入

    这里写图片描述

    NSMutableArray *arr = [NSMutableArray arrayWithObjects:@"lalal", @"hahaha", nil];
    [arr addObject:@"hehehhe"];
    [arr addObjectsFromArray:@[@"ajdsfasd", @"asdfsd"]];
    [arr insertObject:@"sdfasdfasd" atIndex:3];
    NSRange range = NSMakeRange(2, 2);
    NSIndexSet *set = [NSIndexSet indexSetWithIndexesInRange:range];
    //插入数据,指定数组需要插入的位置,和插入多少个
    [arr insertObjects:@[@"sadfs", @"sadfdsf"] atIndexes:set];
    NSLog(@"%@", arr);
    6.删除
    [arr removeObject:(nonnull id)];
    [arr removeObjectAtIndex:NSUInteger)];
    [arr removeLastObject];
    [arr removeObjectsInArray:(nonnull NSArray *)];
    [arr removeObjectsAtIndexes:(nonnull NSIndexSet *)]
    [arr removeAllObjects];
    7.替换
    [arr replaceObjectAtIndex:(NSUInteger) withObject:(nonnull id)];
    [arr replaceObjectsAtIndexes:(nonnull NSIndexSet *) withObjects:(nonnull NSArray *)];
    [arr replaceObjectsInRange:(NSRange) withObjectsFromArray:(nonnull NSArray *)];
    [arr replaceObjectsInRange:(NSRange) withObjectsFromArray:(nonnull NSArray *) range:(NSRange)];
    //最简单的办法就是用C语言的数组
    arr[0] = @"";
    8.获取
    arr[0];
    9.注意
    不能通过@[ ]来创建一个可变数组,@[ ]是用来创建一个不可变得数组,强行使用会引发运行错误
    
    展开全文
  • 比较完美的解决了数组越界的问题, 在debug模式下会崩溃 , 在release不会崩溃 , 开发过程中 , 方便调试 , 正式环境中 减少崩溃.
  • 主要介绍了iOS集合遍历(NSArray、NSDictionary、NSSet)的方法,文中给出了详细的方法示例,并总结了各个方法的优缺点来供大家学习参考,需要的朋友们下面来一起看看吧。
  • NSArray排序demo

    2016-10-24 10:09:28
    NSArray排序demo
  • NSArray_NSMutableArray

    2016-01-18 17:30:14
    Objective-C的数组比C++,Java的数组强大在于,NSArray保存的对象可以是不同的对象。但只能保存对象,int ,char,double等基本数据类型不能直接保存,需要通过转换成对象才能加入数组。
  • NSArray类簇

    2021-01-10 22:29:23
    NSArray 类簇NSArray, NSMutableArray 类簇(class clusters)是抽象工厂模式在iOS下的一种实现,试图将多个类的实现统一在一起,对外只暴露简单的使用接口,隐藏类的真实实现。iOS中的NSArray,NSDictionary,NSArray...

    NSArray 类簇


    类簇(class clusters)是抽象工厂模式在iOS下的一种实现,试图将多个类的实现统一在一起,对外只暴露简单的使用接口,隐藏类的真实实现。iOS中的NSArray,NSDictionary,NSArray以及NSNumber中都使用了这种实现。这里主要看一下数组的大概实现
    注: 以下数据使用64位模拟器演示.

    NSArray, NSMutableArray

    在iOS中,NSArray, NSMutableArray的实现中包含了很多个独立的类,常见的有__NSPlaceholderArray, __NSArray0, __NSSingleObjectArrayI,__NSArrayI, __NSArrayM等

    • __NSPlaceholderArray
      这是一个中间占位类,在使用alloc方法进行空间开辟之后,未初始化之前的NSArray对象都是这个这个类的子类,而且多次调用alloc方法之后生成的是同一个对象.
       for (NSInteger index = 0; index < 5; index++) {
           NSArray *array = [NSArray alloc];
           NSLog(@"array ---> %@, %p", [array class], array);
           NSMutableArray *mutableArray = [NSMutableArray alloc];
           NSLog(@"mutableArray ---> %@, %p", [mutableArray class], mutableArray);
       }
    }
    

    输出结果:

    array ---> __NSPlaceholderArray, 0x7fff80198860,mutableArray ---> __NSPlaceholderArray, 0x7fff80198870
    array ---> __NSPlaceholderArray, 0x7fff80198860,mutableArray ---> __NSPlaceholderArray, 0x7fff80198870
    array ---> __NSPlaceholderArray, 0x7fff80198860,mutableArray ---> __NSPlaceholderArray, 0x7fff80198870
    array ---> __NSPlaceholderArray, 0x7fff80198860,mutableArray ---> __NSPlaceholderArray, 0x7fff80198870
    array ---> __NSPlaceholderArray, 0x7fff80198860,mutableArray ---> __NSPlaceholderArray, 0x7fff80198870
    

    所以在只是调用alloc方法之后,iOS将生成的数组对象指向了同一个地址空间,这样做也是为了最大限度节约不必要的内存开销.
    在这一实现中,系统很有可能使用了静态变量来完成这一过程,猜测的大致实现应该差不多这个样子:

    static __NSPlaceholderArray *allocInstanceOfNSArray() {
    	static ____NSPlaceholderArray *instance;
    	if(instance) {
    		instance = [[__NSPlaceholderArray alloc] init];
    	}
    	return instance;
    }
    static __NSPlaceholderArray *allocInstanceOfNSMutableArray() {
    	static ____NSPlaceholderArray *instance;
    	if(instance) {
    		instance = [[__NSPlaceholderArray alloc] init];
    	}
    	return instance;
    }
    
    + (id)alloc {
    	if (self == [NSArray class]) {
    		return allocInstanceOfNSArray();
    	} 
    	return allocInstanceOfNSMutableArray();
    }
    
    
    • __NSArray0
      如果在NSArray类在调用alloc之后紧接着调用了init方法,那么生成的就是__NSArray0对象了
       for (NSInteger index = 0; index < 5; index++) {
           NSArray *array = [[NSArray alloc] init];
           NSLog(@"array ---> %@, %p", [array class], array);
       }
    

    输出结果:

    array ---> __NSArray0, 0x7fff8002e6e0
    array ---> __NSArray0, 0x7fff8002e6e0
    array ---> __NSArray0, 0x7fff8002e6e0
    array ---> __NSArray0, 0x7fff8002e6e0
    array ---> __NSArray0, 0x7fff8002e6e0
    

    使用字面量生成包含0个元素的数组或者使用allocinit遍历构造器方法,也会生成__NSArray0对象,

    NSArray *array001 = @[];
    NSLog(@"array001 ---> %@, %p", [array001 class], array001);
    NSArray *array002 = @[];
    NSLog(@"array002 ---> %@, %p", [array002 class], array002);
    
    

    输出结果:

    array001 ---> __NSArray0, 0x7fff8002e6e0
     array002 ---> __NSArray0, 0x7fff8002e6e0
    

    在这里NSMutableArray的初始化开始变得不一样:

        for (NSInteger index = 0; index < 5; index++) {
            NSMutableArray *mutableArray = [[NSMutableArray alloc] init];
            NSLog(@"mutableArray ---> %@, %p", [mutableArray class], mutableArray);
        }
    

    输出结果:

    mutableArray ---> __NSArrayM, 0x600003b7f120
    mutableArray ---> __NSArrayM, 0x600003b3ea30
    mutableArray ---> __NSArrayM, 0x600003b752f0
    mutableArray ---> __NSArrayM, 0x600003b7f120
    mutableArray ---> __NSArrayM, 0x600003b752f0
    

    所以这部分的实现很可能是这个样子的:

    // NSArray 
    __NSArray0 *initInstanceOfNSArray () {
    static __NSArray0 *instance ;
    if (!instance) {
    	instance = [[__NSArrayI alloc] init];
    }
    return instance;
    }
     - (instancetype)init {
    	if(self == allocInstanceOfNSArray()) {
    		return initInstanceOfNSArray;
    	}
     	return [[__NSArrayM alloc] init];
     }
    
    • __NSSingleObjectArrayI
      __NSSingleObjectArrayI 则是针对只有一个元素的数组而单独实现的一个类,
        NSArray *singleArray001 = [NSArray arrayWithObject:@"abc"];
        NSArray *singleArray002 = @[@"abc"];
        NSLog(@"singleArray ---> %@, %p", [singleArray001 class], singleArray001);
        NSLog(@"singleArray ---> %@, %p", [singleArray002 class], singleArray002);
    

    输出结果:

    singleArray ---> __NSSingleObjectArrayI, 0x6000018c85e0
    singleArray ---> __NSSingleObjectArrayI, 0x6000018c85f0
    
    展开全文
  • NSArray与NSMutableArray的区别
                   

    在iOS 开发过程中, NSArray,NSMutableArray、NSDictionary、 NSMutableDictionary 经常被用到。这里先来介绍NSArray  与 NSMutableArray。 

      NSArray 和 NSMutableArray  二者有时可任意选用,有时又必区分开来。


    首先,NSArray只能存储Objective-C 对象,而不能存储C语言中的基本数据类型,比如:int,flot,指针等。 在使用NSArray时,需特别注意,必须以nil 结尾,以此来代表结束。 

    举例如下:

     NSArray 通过类方法 arrayWithObjects 创建一个新的NSArray。

    NSArray * array;

    array = [ NSArray arraryWithObjects: @"one", @"two", @"three",nil     ] ;

    为了查看array 的内容, 可通过NSLog方法,如下:

    for(int i=0; i<[array count]; i++ )

    {

    NSLog (@"index %d has %@", i, [array objectAtIndex:i]);

    }

    从中可看出,NSArray 创建的是静态数组,一旦创建之后,就再也不能添加和删除数组中的对象了。


    NSMutableArray 是 NSArray 补充类。NSMutalbeArray 创建的是动态数组,可随意添加或删除数组中的元素。

    也行你会看到 arrayWithCapacity 方法,这个数组容量仅仅是一个参考,不会真的限制数组的大小。 是为代码优化而设计的。

    NSMutableArray 使用addObject: 在末尾添加对象, 用removeObjectAtIndex: 来删除指定索引处的对象。对象删除后,被删除对象后面的数组元素被迁移,填补空缺。

    这里给出一个实例:

    #import <Foundation/Foundation.h>

    int main( )

    {

    NSArray *array = [[NSArray alloc]

    initWithObjects: @”red”, @"white”,

    @"blue”, nil];

    printf(“Array has been created.”);

    return 0;

    }

     这里需特别注意的是:NSArray 的初始化必须以 nil 结束。

    另外还需注意,在字符串前加 @ ,这是 数组在 Objective-C  与 C 的区别。

     如何访问获取 NSArray 中的对象呢?  通过 NSArray的objectAtIndex: 方法。 改写如下:    

    #import <Foundation/Foundation.h>

    int main( )

    {

    NSArray *array = [[NSArray alloc]

    initWithObjects: @”red”, @”white”,

    @”blue”, nil];

    printf(“array[0] = %s”, [[array objectAtIndex: 0] cString]);

    return 0;

    }

    输出结果:   array[0] = red.

    同理,通过 NSArray的 insertObjectAtIndex: 可以很方便地将已有的对象插入数组中的指定位置。

    NSDictionary和NSMutableDictionary

            //NSDictionary 初始化
            NSDictionary *d1 = [NSDictionary dictionaryWithObjectsAndKeys:@"Shanghai", @"Location", @"Programmer", @"Occupation", nil];
            NSLog(@"d1: %@", d1);

    //NSDictionary 个数
            NSLog(@"d1 count: %ld", [d1 count]);

    //NSDictionary 枚举keys/values
    //NSEnumerator *keys1 = [d1 keyEnumerator];
            NSEnumerator *objs1 = [d1 objectEnumerator];
    for (NSObject *obj1 in objs1) {
                NSLog(@"obj: %@", obj1);
            }

    //NSDictionary 根据key获取object
            NSLog(@"obj: %@", [d1 objectForKey:@"Location"]);

    //NSMutableDictionary 初始化        dictionaryWithCapacity, dictionaryWithObjectsAndKeys:<#(id), ...#>, nil
            NSMutableDictionary *d2 = [NSMutableDictionary dictionaryWithCapacity:2];
            [d2 setObject:@"Shanghai" forKey:@"Location"];
            [d2 setObject:@"Programmer" forKey:@"Occupation"];
            NSLog(@"d2: %@", d2);
            [d2 setObject:@"Male" forKey:@"Gender"];
            NSLog(@"d2: %@", d2);

     


    1、初始化字典

        NSDictionary *dictionary = [[NSDictionary alloc]initWithObjectsAndKeys:@"One",@"1",@"Two",@"2",@"Three",@"3",nil];
        NSString *string = [dictionary objectForKey:@"One"];
        NSLog(@"string:%@",string);
        NSLog(@"dictionary:%@",dictionary);
        [dictionary release];

     

    2、添加字典

        [dictionary setObject:@"One" forKey:@"1"];
        [dictionary setObject:@"Two" forKey:@"2"];
        [dictionary setObject:@"Three" forKey:@"3"];
        [dictionary setObject:@"Four" forKey:@"4"];

     

    3、删除字典

    [dictionary removeObjectForKey:@"3"];

               

    再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

    展开全文
  • NSArray倒序排列

    2018-09-06 16:19:26
    array = array.reverseObjectEnumerator.allObjects;
        array = array.reverseObjectEnumerator.allObjects;
    展开全文
  • NSArray_Class

    2012-10-17 15:06:52
    官方文档,数组类的最权威文档。各种数组方法的详细说明。英文的。
  • NSArray+FunctionalHelper 在使用了 Linq、Underscore.js 和 ActiveRecord 等框架之后,我们习惯了许多为集合提供的方法。 我们没有继续在没有它们的情况下生活,而是自己写了一些。 每个返回NSArray或NSSet都会...
  • NSArray实战

    2017-07-30 22:53:44
    NSArraytips:如有错误、遗漏,欢迎指摘!创建数组推荐使用Literals方式 // Literal,... NSArray *array = @[@"Loe",@"Mach",@"Grace",@"Loe",@"Mach",@"Grace",@"Loe",@"Mach",@"Grace",@"Loe",@"Mach",@"Grace"]; N
  • iOS NSArray 、NSMutableArray原理揭露

    千次阅读 2018-09-13 15:56:56
    在iOS开发中,我们在非常非常多的地方用到了数组。而关于数组,有很多需要注意和优化的细节,需要我们潜入到下面,去了解...In the case of NSArray, when an instance is allocated, it’s an instance of another ...
  • NSArray类的分析

    2016-07-25 08:18:05
    /* NSArray.h Copyright (c) 1994-2015, Apple Inc. All rights reserved. */ #import #import #import #import @class NSData, NSIndexSet, NSString, NSURL; /**************** Immut
  • 版本 Xcode 8.2.1 一、不可变数组NSArray 二、可变数组NSMutableArray
  • iOS之NSArray使用集合

    千次阅读 2017-04-12 13:55:06
    ===========1.数组中元素按升序或降序列排列  //升序  NSArray* tempIds = [spceids sortedArrayUsingComparator:^NSComparisonResult(NSString* obj1, NSString* obj2) {    NSNumber
  • array和asarray都可以将结构数据转化为ndarray,但是主要区别就是当数据源是ndarray时,array仍然会copy出一个副本,占用新的内存,但asarray不会。 当传入参数本身是ndarray的时候才有作用 a = np.array([1,2,3]...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 121,344
精华内容 48,537
关键字:

nsarray