objective-c 学习 数组

概述:

  1. OC里面的数组是一种线性结构数据类型,在foundation框架之内。分为可变数组(NSArray)与不可变数组(NSMultiArray),其中MultiArray 继承自 NSArray  ,所以NSArray的各种方法,NSMultiArray一样可以使用。
  2. 数组可以通过下标索引到相应的对象。
  3. NSarray和NSmultiArray里面存储的内容只能是——对象(类的实例) 。所以基本数据类型不能直接存储进去,可以使用NSValue或者NSNumber封装存储进去

数组数据模型:

  1. OC里面的数组是一种线性的数据结构,它的数据原型是线性表.下图展示了线性表的抽象数据类型(定义+操作)
  2. 操作有8种:大约是:增删查改 始数找空

数组的常见操作

IOS中的数组,是线性表这个抽象数据结构的一种具象的实现,下面就展示一下苹果公司的程序员们如何实现这个线性结构的。

1初始化:(初始化操作,建立一个数组对象,并且赋值)

1 类方法初始化:(这里注意一下苹果的命名规范,类方法一般是 classWith ,命名规范其实很重要),这里有四种情况:分别是一个对象,多个对象,使用数组,从文件 初始化

        // 类方法命名规范
        // 初始化一个  因为是不可变的 所以实用性不强
        NSArray *arr1=[NSArray arrayWithObject:@"hello"];

        //多个以nil作为数组的结束
        NSArray *arr2=[NSArray arrayWithObjects:@"1",@"2", nil];
        // 元素指向了同一个位置
        NSArray *arr3=[NSArray arrayWithArray:arr2];
        // 从文件初始化数组
//        NSArray *arr3=[NSArray arrayWithContentsOfURL:<#(NSURL *)#>];

2 实例方法初始化:

NSArray *arr4=[[NSArray alloc] initWithArray:arr1];

3 可变数组的初始化

        // 添加了一个空的数组
        NSMutableArray *mulArray1=[NSMutableArray array];
        // 初始化,加上容量
        NSMutableArray *mulArray=[NSMutableArray arrayWithCapacity:1];

2 数组长度:(返回数组元素个数)

        // 元素个数
        int count=[arr2 count];

3 查:将数组第i个对象返回,

        // 访问哪个元素
        NSString *string1=[arr1 objectAtIndex:0];
        // 查找最后一个对象
        NSLog(@"%@",[arr2 lastObject]);

遍历

        // 快速遍历
        for(/*或者ID*/NSString *string in mulArray)
        {

        }

4 找:根据对象,查找数组,如果存在相同的对象,返回序号,否则返回false

// 查询对象位置
        int objIndex=[arr2 indexOfObject:@"2"];
        // 判断是否有这个元素  这个是判断有没有
        if(![arr2 containsObject:@"a"])
           {
               NSLog(@"没有");
           }

5 增:在第i个位置增加元素

        // 追加对象,返回新的数组
        NSArray *arr11=[arr1 arrayByAddingObject:@"haha"];

不可变数组无法对数组进行修改,这里的操作都是可变数组的,

        // 添加对象
        for(int i=0;i<20;i++)
        {
            [mulArray addObject:@"aaa"];
            [mulArray addObject:@"bbb"];
        }

        // 根据索引位置添加一个元素
        [mulArray insertObject:@"bbb" atIndex:1];

6 删:删除指定位置元素

        // 删除
        // 删除最后一个
        [mulArray removeLastObject];
        // 删除相应元素
        [mulArray removeObject:@"aaa"];
        // 指定坐标删除
        [mulArray removeObjectAtIndex:3];

        // 根据数组来删除
        [mulArray removeObjectsInArray:arr1];

7 改:修改指定位置元素(就是替换)

        // 替换
        [mulArray replaceObjectAtIndex:0 withObject:@"1"];

8 空: 判空,返回true false

IOS中没有数组判空操作,你可以用count==0来判断

欢迎转载,转载请注明出处:http://blog.csdn.net/zhenggaoxing/article/details/43559869

本系列博文目录:objective-c 学习系列目录 不定时更新

时间: 2024-10-08 15:56:44

objective-c 学习 数组的相关文章

Java基础学习——数组初识(1)

Java基础学习--数组初识(1) 1什么是数组 Java中常见的一种数据结构就是数组,数组可以分为一维数组.二维数组和多维数组. 数组是由一组相同的变量组成的数据类型,数组中每个元素具有相同的数据类型,数组中的每个元素都可以用一个统一的数组名和下标来确定. 2 数组的使用 数组的一般使用步骤: 声明数组 分配内存给该数组 下面是一维数组为例: 数据类型  数组名 []: 数组名 = new 数据类型 [数据个数]: 2.1一维数组的声明与赋值 1.数组的声明 int  num [];    

&nbsp; 我的java学习 の 数组作业

  class 数组作业{/********1.1永远在第一行的中间: 2.下一个数,永远填在右上角: 3.若右上角没位置了,要转头(两种情况) 4. 若遇到n的倍数,一个数,直接填在它的下方. ********/public static void main(String[] args){ int n=11; int[][] a= new int[n][n]; int i=0; int j=n/2; a[i][j]=1; for(int k=2; k<=n*n;k++){ if(a[i][j]

Swift编程语言翻译与学习——数组

Swift 语言提供经典的数组和字典两种集合类型来存储集合数据.数组用来按顺序存储相同类型的数据.字典虽然无序存储相同类型数据值但是需要由独有的标识符引用和寻址(就是键值对). Swift 语言里的数组和字典中存储的数据值类型必须明确. 这意味着我们不能把不正确的数据类型插入其中. 同时这也说明我们完全可以对获取出的值类型非常自信. Swift 对显式类型集合的使用确保了我们的代码对工作所需要的类型非常清楚,也让我们在开发中可以早早地找到任何的类型不匹配错误. 注意: Swift 的数组结构在被

Day2 Python学习 数组,循环,字符串

一.学习的内容 1.命令 sys.path() 显示当前环境变量 2.命令os.system("dir") 显示当前目录内的文件,只显示,不保存结果 3.命令text = os.popen("dir").read() 显示当前目录内的文件,可保存结果 4.命令 os.mkdir("new_dir") 创建一个叫"new_dir"的文件夹 5.三元运算 a,b,c = 1,2,3 d = a if a> b else c

Objective-C学习-数组 NSArray 和 NSMutableArray(欢迎提意见)

在学习 Objective-C的过程中,感觉数组在这一个学习方面是一个比较大的应用域,所以写这篇随笔来总结一下. 首先声明的是,与C语言的数组不同,Objective-C的是数组只能用来存储对象,而不是存储int .double.char等基础数据类型,一般要存这些基础数据类型,对于我这个刚学 Objective-C的新手来说,我的做法是将有关数字的基础类型 如 int .double.char首先转换成一个叫做 NSNumber的类  char*类型的转换成  Objective-C的字符串

Objective - C学习笔记:UIView的使用方法

1.1 - (void)layoutSubviews; * 当一个控件的frame发生改变的时候就会自动调用 * 一般在这里布局内部的子控件(设置子控件的frame) * 一定要调用super的layoutSubviews方法 1.2 - (void)didMoveToSuperview; * 当一个控件被添加到父控件中就会调用 1.3 - (void)willMoveToSuperview:(UIView *)newSuperview; * 当一个控件即将被添加到父控件中会调用 @interf

java学习——数组

元素类型[] 数组名 = new 元素类型[元素个数或数组长度]; array 为引用数据类型|-数组数据类型 | 内存结构:程序在运行时,需要在内存中的分配空间.为了提高运行的效率,有对空间进行不同区域的划分,因为每一片区域都有特定的处理数据方式和内存内存管理方式. 栈内存:用于存储局部变量,而数据使用完,所占的空间会自动释放. 堆内存:1,数组和对象,通过new建立的实例都存放在堆内存中 2,每一个实体都有内存地址值. 3,实体中的变量都有默认初始值. 4,实体不在被使用,会在不确定的时间被

JavaScript数组方法对比(深度学习数组)

JavaScript数组方法对比 众所周知,JavaScript提供了许多对数组进行改变的方法,但是有些会对原数组进行影响,有些不会.下边就列举出来. 一.新增 影响原数组 array.push()  //向数组的末尾添加一个或更多元素,并返回新的长度. var array =[1,2,3,4,5]; array.push(6); // [1,2,3,4,5,6]; array.unshift() //向数组的开头添加一个或更多元素,并返回新的长度. var array =[1,2,3,4,5]

Swift学习----数组

数组(有序数据的集) *格式 : [] / [Int]() / Array<Int>() * let 不可变数组 * var 可变数组 注意: * 不需要改变集合的时候创建不可变集合是很好的实践.如此 Swift 编译器可以优化我们创建的集合. // 声明数组 let arr1: Array<Int> // 推荐 let arr2: [Int] arr2 = [10, 20] // 先定义再初始化 //arr2 = [30, 40] var arr3: [Double] arr3