学习iOS【3】数组、词典和集合

一、数组

1.不可变数组NSArray

  • arrayWithObjects:使用一组对象作为元素创建不可变数组,注意数组的最后一个值需要指定为nil,用来表示参数的结束,但是nil并不会存储在数组中。
  • objectAtIndex:获取指定索引位置的数组元素。
  • @[elm1,elm2….elmn]:另外一种创建数组的简便方式,不需要以nil作为结尾元素;
  • array[index]:另外一种获取指定索引位置元素的方式。
  • count:数组中元素个数。
int main(int argc, const char * argv[])
{
    @autoreleasepool {
        /*不可变数组*/
        //创建不可变数组 方式一
        NSArray *arr=[NSArray arrayWithObjects:@"周一",@"周二",@"周三",@"周四",@"周五",@"周六",@"周日",nil];
        for(int i=0;i<[arr count];i++){
            NSLog(@"%@",[arr objectAtIndex:i]);
        }
        //创建不可变数组 方式二
        NSArray *[email protected][@"周一",@"周二",@"周三",@"周四",@"周五",@"周六",@"周日"];
        for(int i=0;i<[arr1 count];i++){
            NSLog(@"%@",arr1[i]);
        }
    }
}

2.可变数组NSMutableArray

  • NSMutableArray array方法创建空的可变数组,数组元素个数未定,可以随着需要增长;
  • addObject:向可变数组结尾添加元素;
  • insertObject:obj atIndex:i :将对象obj插入数组的第i个元素。
  • removeObjectAtIndex:i  删除数组中第i个元素。
  • replaceObjectAtIndex:i withObject:obj 将数组中序号为i的对象用obj替换。
  • 使用NSLog格式化%@可以显示整个数组,它实际上会调用每个元素的description方法。
int main(int argc, const char * argv[])
{
    @autoreleasepool {
        /*可变数组*/
        NSMutableArray *marr=[NSMutableArray array];
        for (int i=0; i<3; i++) {
            marr[i][email protected](i+1);
        }
        [marr addObject:@(4)];
        for (int i=0; i<[marr count]; i++) {
            NSLog(@"%@",marr[i]);
        }
        NSLog(@"%@",marr);
     }
}

二、词典对象(dictionary)

词典也有两种类型:不可变词典NSDictionary和可变词典NSMutableDictionary。

1.不可变词典NSDictionary

  • NSDictionary dictionaryWithObjectsAndKeys:创建不可变词典,参数是值-键对组合(注意顺序),以nil结尾。
  • allKeys:返回一个数组包含词典中的所有键;
  • count:返回词典中的记录数;
  • objectForKey:返回key的值对象。
int main(int argc, const char * argv[])
{
    @autoreleasepool {
        /*不可变词典*/
        NSDictionary *dic=[NSDictionary dictionaryWithObjectsAndKeys:@"学生",@"1",@"教师",@"2", nil];
        for (NSString *key in dic) {
            NSLog(@"key:%@ value:%@",key,[dic objectForKey:key]);
        }
     }
}

2.可变词典NSMutableDictionary

  • NSMutableDictionary dictionary:创建一个可变词典;
  • setObject:forKey:把键值对添加到可变词典中;
  • removeAllObjects:删除词典中所有的记录;
  • removeObjectForKey:删除词典中的指定键key对应的记录;
int main(int argc, const char * argv[])
{
    @autoreleasepool {
        /*可变词典*/
        //创建可变词典对象
        NSMutableDictionary *mdic=[NSMutableDictionary dictionary];
        //添加键值对
        [mdic setObject:@"学生" forKey:@"1"];
        mdic[@"2"]=@"教师";
        //显示键值对
        NSLog(@"key:1 value is:%@",[mdic objectForKey:@"1"]);//key:1 value is:学生
        NSLog(@"key:2 value is:%@",mdic[@"2"]);//key:2 value is:教师
        //删除
        [mdic removeObjectForKey:@"1"];
        NSLog(@"mdic count:%lu",[mdic count]);//mdic count:1
        [mdic removeAllObjects];
        NSLog(@"mdic count:%lu",[mdic count]);//mdic count:0
     }
}

三、集合对象(set)

set是一组单值对象集合。

1.NSSet 不可变词典

  • setWithObjects:以一个nil为结尾的对象数组创建一个集合。
  • containObject:检测某个对象是否包含在集合中。
  • count:集合成员个数。

2.NSMutableSet 可变词典

  • addObject:向集合中添加对象;
  • removeObject:从集合中删除对象;
  • removeAllObjects:删除集合中所有对象;
  • unionSet:求两个集合的并集;
  • intersectSet:求两个集合的交集

3.实例

首先我们自定义分类为NSSet添加自定义方法print。

NSSet+Printing.h

#import <Foundation/Foundation.h>

@interface NSSet (Printing)
-(void)print;
@end

NSSet+Printing.m

#import "NSSet+Printing.h"

@implementation NSSet (Printing)
-(void)print{
    NSLog(@"------");
    for(NSNumber *item in self){
        NSLog(@"%li",(long)[item integerValue]);
    }
}
@end

main.m

#import <Foundation/Foundation.h>
#import "NSSet+Printing.h"

int main(int argc, const char * argv[])
{
    @autoreleasepool {
        //创建不可变集合
        NSSet *set=[NSSet setWithObjects:@"1",@"3",@"5", @"7",nil];
        //创建可变集合
        NSMutableSet *mset=[NSMutableSet setWithObjects:@"1",@"2",@"3",@"4",@"5", nil];
        //输出
        [set print];
        [mset print];
        //成员测试
        if([set containsObject:@"7"]==YES){
            NSLog(@"set contain 7");
        }else{
            NSLog(@"set does not contain 7");
        }
        //添加对象
        [mset addObject:@"6"];
        [mset print];
        //移除对象
        [mset removeObject:@"6"];
        //求并集
        [mset unionSet:set];
        [mset print];
        [mset print];
        //求交集
        [mset intersectSet:set];
        [mset print];
     }
}
时间: 2024-10-13 02:22:45

学习iOS【3】数组、词典和集合的相关文章

#在蓝懿学习iOS的日子#Day10

#在蓝懿学习iOS的日子#Day10今天做了一个大的游戏,涵盖了这段时间学洗的知识,页面的切换字符串,还有可变数组和遍历等知识点. 1.显示搭建视图添加背景,创建一个选择hero视图,添加一个button点击进入下一个选择hero视图: 2.在hero视图搭建视图添加背景,创建一个英雄hero类,把不同的英雄j连接进同一个button,设置tag用以区分hero类:在点击button进入游戏页面, 3.在游戏页面添加移动的背景视图, -(void)initBG{ //添加背景图片 self.bg

黑马程序员_学习IOS之字典常用的方法

字典是无序的 数组是有序的.字典分为:可变字典和不可变字典  不可变字典对象 NSDictionary * dict = [[NSDictionary alloc]initWithObjectsAndKeys:@"one",@"1",@"two",@"2",@"three",@"3",@"four",@"4", nil]; //value = ke

学习IOS开发UI篇--UITableView/数据模型嵌套/UITableViewCell/Cell的重用

1.UITableView ================================================== UITableView有两种格式:group和plain 2.UITableView如何展示数据 ================================================== UITableView需要一个数据源(dataSource)来显示数据 凡是遵守UITableViewDataSource协议的OC对象,都可以是UITableView的

【零基础学习iOS开发】【01-前言】01-开篇

本文目录 一.什么是iOS 二.主流手机操作系统 三.什么是iOS开发 四.学习iOS开发的目的 五.学习iOS开发的前提 从今天开始,我就开始更新[零基础学习iOS开发]这个专题.不管你是否涉足过IT领域,也不管你是理科生还是文科生,只要你对iOS开发感兴趣,都可以来阅读此专题.我尽量以通俗易懂的语言,让每个人都能够看懂.若遇到不明白的地方或者对此文有异议,望及时评论. 回到顶部 一.什么是iOS 要想学习iOS开发,首先要搞清楚什么是iOS.iOS其实是一款操作系统,就像平时我们在电脑上用的

学习IOS开问题篇--类中的成员变量如果不实例化是什么情况

@interface Person : NSObject @property (noatonmic,copy) NSString * name; @end 一个person类,name是person得成员变量 如果在一个类中写入person为成员变量 self.person.name = @"zhangsan"; 如果前面不将person实例化,实际上是在对一个空指针进行操作 [nil setname:@"zhangsan"]; 因为oc中对空指针发消息不会报错,所

Swift学习笔记(5):集合类型

目录: 数组:Array 集合:Set 字典:Dictionary Swift提供Array(有序集合数据).Set(无序无重复集合)和Dictionary(无序键值对集合)三种基本集合类型来存储明确数据类型的集合数据. 使用var将集合声明为变量,可以在创建之后添加.移除.修改集合内数据项.如果使用let将集合声明为常量,则它的大小和内容就都不可改变. 数组:Array 初始化和赋值: var someInts = [Int]() // 创建指定数据类型的空数组 someInts = [] /

学习IOS开发UI篇--数据存储

iOS应用数据存储的常用方式 1.lXML属性列表(plist)归档 2.lPreference(偏好设置) 3.lNSKeyedArchiver归档(NSCoding) 4.lSQLite3 5.lCore Data Documents:保存应用运行时生成的需要持久化的数据,iTunes同步设备时会备份该目录.例如,游戏应用可将游戏存档保存在该目录 tmp:保存应用运行时所需的临时数据,使用完毕后再将相应的文件从该目录删除.应用没有运行时,系统也可能会清除该目录下的文件.iTunes同步设备时

【零基础学习iOS开发】【转载】

原文地址:http://www.cnblogs.com/mjios/archive/2013/04/24/3039357.html 本文目录 一.什么是iOS 二.主流手机操作系统 三.什么是iOS开发 四.学习iOS开发的目的 五.学习iOS开发的前提 从今天开始,我就开始更新[零基础学习iOS开发]这个专题.不管你是否涉足过IT领域,也不管你是理科生还是文科生,只要你对iOS开发感兴趣,都可以来阅读此专题.我尽量以通俗易懂的语言,让每个人都能够看懂.若遇到不明白的地方或者对此文有异议,望及时

学习iOS: 3

这一课相对于上一课没有增加太多新的知识点,还是按照mvc的设计原则完善补充了纸牌游戏的内容.下面是几个注意到的点. 1. readonly:对属性声明为readonly,表明这个属性是没有setter方法的,从外部来看就是只读的:而在内部实现中重新声明这个属性为readwrite就可以修改它的值了. 2. 在添加了另外11张纸牌后,设置它们的action和outlet时,是将所有的cardbutton对象连接成outlet并放置在一个IBOutetCollection中,开始并不理解,认为不是应