博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
集合(NSArray,Set,NSMutableArray,NSDictionary)
阅读量:4554 次
发布时间:2019-06-08

本文共 8039 字,大约阅读时间需要 26 分钟。

集合(Set NSArray)

        OC集合类型

        1.数组

        2.字典

        3.集合        

        NSArray, 不可变数组类, 用于存放一组有序的对象, 继承于NSObject

        : 数组中的元素必须是对象  

        创建数组对象

NSArray *array1 = [[NSArray alloc]initWithObjects:@"liudehua", @"zhangxueyou", @"guofucheng", @"liming", nil];

        : 元素之间用逗号隔开, 最后以nil结束

NSLog(@"%@", array1);//打印对象使用%@              NSArray *array2 = [NSArray arrayWithObjects:@"xiaoshengyang", @"songxiaobao", @"zhaosi", @"liuneng", nil];        NSLog(@"%@", array2);

数组的元素个数

  NSUInteger count = [array2 count]; NSLog(@"%lu", count); 

获取数组的某个元素

  NSString *name = [array2 objectAtIndex:3]; NSLog(@"%@", name); 

获取数组的最后一个元素

NSString *lastObject = [array2 lastObject];        NSLog(@"%@", lastObject);

获取数组的第一个元素

NSString *firstObject = [array2 firstObject];        NSLog(@"%@", firstObject);

遍历数组的每一个元素, 输出每一个元素的值

for (NSInteger i = 0; i < [array2 count]; i++) {            NSLog(@"%@", [array2 objectAtIndex:i]);        }

NSMutableArray, 可变数组类, 继承于NSArray

NSMutableArray *mArray = [[NSMutableArray alloc]initWithCapacity:0];        NSLog(@"%@", mArray);

添加元素

[mArray addObject:@"iPhone"];        [mArray addObject:@"iPad"];        [mArray addObject:@"Apple Watch"];        NSLog(@"%@", mArray);

: 添加到数组的最后

插入元素

[mArray insertObject:@"iMac" atIndex:1];        NSLog(@"%@", mArray);

添加多个元素

NSArray *tempArray = [NSArray arrayWithObjects:@"iPhoto", @"iWork", @"iTunes", @"iBooks",nil];        [mArray addObjectsFromArray:tempArray];        NSLog(@"%@", mArray);

: 数组元素必须是对象, 但是对象的数据局类型可以不相同

NSMutableArray *mArray2 = [NSMutableArray arrayWithObjects:@"A程序员", @"B程序媛", @"C设计狮", @"D产品狗", @"E运营鼠", @"F销售猴", @"G总经狸", nil];        NSLog(@"%@", mArray2);

移除某个元素

[mArray2 removeObjectAtIndex:1];        NSLog(@"%@", mArray2);

交换两个元素

[mArray2 exchangeObjectAtIndex:2 withObjectAtIndex:5];        NSLog(@"%@", mArray2);

替换某个元素

[mArray2 replaceObjectAtIndex:0 withObject:@"H工程狮"];        NSLog(@"%@", mArray2);

移除所有元素

[mArray2 removeAllObjects];        NSLog(@"%@", mArray2);

冒泡排序

NSMutableArray *array = [NSMutableArray arrayWithObjects:@"iOS", @"Android", @"window phone", @"symbian", @"blackberry", nil];        NSLog(@"比较前:");        for (NSInteger i = 0; i < [array count]; i++) {            NSString *a = [array objectAtIndex:i];            NSLog(@"%@", a);        }                 for (NSInteger i = 0; i < [array count] - 1; i++) {             for (NSInteger j = 0; j < [array count] - 1 - i; j++) {                 if ([[array objectAtIndex:j]compare:[array objectAtIndex:j + 1]] == NSOrderedDescending) {                     [array exchangeObjectAtIndex:j withObjectAtIndex:j + 1];//交换元素                 }             }         }                NSLog(@"\n比较后:");        for (NSInteger i = 0; i < [array count]; i++) {            NSString *a = [array objectAtIndex:i];            NSLog(@"%@", a);        }

        for...in快速枚举

        不需要关心下标和循环次数, 内部自动做处理

        每一次循环, 把当前数组中的元素赋值给string

for (NSString *string in array) {            NSLog(@"%@", string);        }

        数组的排序方法

 OC中对数组进行排序, 只要给相邻两个元素的比较方法, 就会自动对数组进行排序, 并把排序的数组返回来

NSArray *sortArray = [array     sortedArrayUsingSelector:@selector(compare:)];//caseInsensitiveCompare:        NSLog(@"%@", sortArray);

把基本的数据类型转化为对象

int num1 = 1;        float num2 = 10.10;        double num3 = 20.123;

        常用的方式

        1.基本数据类型 -> NSString

NSString *str1 = [NSString stringWithFormat:@"%d", num1];        NSString *str2 = [NSString stringWithFormat:@"%f", num2];        NSString *str3 = [NSString stringWithFormat:@"%lf", num3];//      NSLog(@"%@ %@ %@", str1, str2, str3);
NSArray *numberArray = [NSArray arrayWithObjects:str1, str2, str3, nil];        NSLog(@"%@", numberArray);                int num4 = [[numberArray objectAtIndex:0] intValue];        float num5 = [[numberArray objectAtIndex:1] floatValue];//转化为浮点类型        double num6 = [[numberArray objectAtIndex:2] doubleValue];        NSLog(@"%d %f %lf", num4, num5, num6);

        2.基本数据类型 -> NSNumber

        NSNumber, 数值类, 把基本的数据类型(int, short, char, long, float, double, BOOL)转换成NSNumber的对象, 或者把NSNumber的对象转换成基本数据类型, 继承于NSValue

 

//int -> number        NSNumber *intNumber = [NSNumber numberWithInt:10];                //float -> number        NSNumber *floatNumber = [NSNumber numberWithFloat:3.14];                //BOOl -> number        NSNumber *boolNumber = [NSNumber numberWithBool:YES];        NSArray *numberArray1 = [NSArray arrayWithObjects:intNumber, floatNumber, boolNumber, nil];        NSLog(@"%@", numberArray1);                //number -> int        int num7 = [intNumber intValue];                //number -> float        float num8 = [floatNumber floatValue];                //number -> BOOL        BOOL num9 = [boolNumber boolValue];        NSLog(@"%d %f %d", num7, num8, num9);

        字典

        NSDictionary, 不可变字典类, 继承于NSObject, 字典中存放的数据以键值对(key-value)形式存在, key值是唯一的, 不能重复  

        创建字典对象

NSDictionary *dic1 = [[NSDictionary alloc] initWithObjectsAndKeys:@"xiaoming", @"name", @"male", @"gender", @"18", @"age", nil];        NSLog(@"%@", dic1);

        : 1.字典是无序的

            2.value在前, key在后

            3.nil结尾        

   如何获取value?

   通过key值获取value

NSString *nameString = [dic1 objectForKey:@"name"];        NSLog(@"%@", nameString);               NSString *genderString = [dic1 objectForKey:@"gender"];        NSLog(@"%@", genderString);             NSString *ageString = [dic1 objectForKey:@"age"];        NSLog(@"%@", ageString);

  获取所有的value

NSArray *values = [dic1 allValues];        NSLog(@"%@", values);

获取所有的key

NSLog(@"%@", [dic1 allKeys]);

求字典的键值对个数

NSLog(@"%lu", [dic1 count]);

遍历字典的键值对, 输出valuekey

//1        for (NSInteger i = 0; i < [[dic1 allKeys] count]; i++) {            NSString *key = [[dic1 allKeys] objectAtIndex:i];            NSString *value = [dic1 objectForKey:key];            NSLog(@"%@ - %@", key, value);        }                //2        for (NSString *key in [dic1 allKeys]) {            NSLog(@"%@ - %@", key, [dic1 objectForKey:key]);        }                //3 for...in对字典使用, 遍历的是key值        for (NSString *string in dic1) {            NSLog(@"%@ - %@", string, [dic1 objectForKey:string]);        }

NSMutableDictionary, 可变字典类, 继承于NSDictionary

NSMutableDictionary *mDic = [[NSMutableDictionary alloc]initWithCapacity:0];        NSLog(@"%@", mDic);

添加键值对(key值不存在)

[mDic setObject:@"bianda" forKey:@"dawa"];        [mDic setObject:@"qianliyan" forKey:@"erwa"];        [mDic setObject:@"daoqiangburu" forKey:@"sanwa"];        NSLog(@"%@", mDic);

修改键值对(key值已存在)

[mDic setObject:@"lidawuqiong" forKey:@"dawa"];        NSLog(@"%@", mDic);

删除键值对

[mDic removeObjectForKey:@"sanwa"];        NSLog(@"%@", mDic);

删除所有

[mDic removeAllObjects];        NSLog(@"%@", mDic);

集合

        NSSet, 不可变集合, 集合内的元素都是无序的, 元素唯一, 继承于NSObject

NSSet *set = [[NSSet alloc] initWithObjects:@"1", @"2", @"3", nil];        NSLog(@"%@", set);

获取集合元素个数

 NSLog(@"%lu", [set count]); 

访问集合中的元素

 NSLog(@"%@", [set anyObject]); 

访问集合中所有的元素

 NSLog(@"%@", [set allObjects]); 

将数组重复值取消

NSArray *arr = [NSArray arrayWithObjects:@"1", @"1", @"2", @"2", @"3", @"3", nil];        NSLog(@"%@", arr);                NSSet *set1 = [NSSet setWithArray:arr];        NSLog(@"%@", [set1 allObjects]);//数组输出                NSSet *set11 = [NSSet setWithObjects:@"2", @"3", nil];        NSSet *set12 = [NSSet setWithObjects:@"4", @"2", @"3", nil];

判断集合是否包含另外一个集合

if ([set11 isSubsetOfSet:set12]) {            NSLog(@"是子集合");        }                //相交        if ([set11 intersectsSet:set12]) {            NSLog(@"相交");        }                //相等        if ([set11 isEqualToSet:set12]) {            NSLog(@"相等");        }

NSMutableSet, 可变集合, 继承于NSSet

NSMutableSet *mSet = [[NSMutableSet alloc] initWithCapacity:0];        NSLog(@"%@", mSet);

添加元素

[mSet addObject:@"123"];        [mSet addObject:@"321"];        [mSet addObject:@"567"];        NSLog(@"%@", mSet);

删除元素

[mSet removeObject:@"567"];        NSLog(@"%@", mSet);

删除所有元素

[mSet removeAllObjects];        NSLog(@"%@", mSet);   
数组

         1.有序的

        2.元素是对象

        3.元素不唯一

        4.通过下标访问数组的某个元素

        5.(元素1, 元素2, 元素3, ...)      

   字典

        1.无序的

        2.键值对

        3.key值唯一, value值不唯一

        4.通过key值访问对应的value

        5.{key1 = value1; key2 = value2; key3 = value3; ...}分号隔开   

  集合

        1.无序的

        2.元素必须是对象

        3.元素唯一

        4.随机访问元素

        5.{(元素1, 元素2, 元素3, ...)}

   基本数据类型 <-> 对象

        1.NSString

        2.NSNumber

 

 

 

 

 

转载于:https://www.cnblogs.com/OrangesChen/p/4858325.html

你可能感兴趣的文章
this point
查看>>
验证登录信息是否合法
查看>>
线程池
查看>>
git版本控制器的基本使用
查看>>
Redis 笔记与总结4 set 和 zset 类型
查看>>
jQuery Ajax 回调函数中调用$(this)的问题 [ 转 ]
查看>>
thymeleaf:字符串拼接+输出单引号
查看>>
springboot:集成fastjson(教训)
查看>>
网络流 Edmons-Karp 算法讲解
查看>>
「NOIP2018模拟9.10」公约数 - 找规律 - gcd
查看>>
使用java理解程序逻辑(15)
查看>>
bzoj 1879 状压dp
查看>>
python 一些特殊用法和坑
查看>>
WIFI密码破解全攻略
查看>>
c++string各种函数
查看>>
errno.h含义
查看>>
字典树(模型体)
查看>>
盒模型详解
查看>>
bzoj2157 旅游
查看>>
bzoj5016 [Snoi2017]一个简单的询问
查看>>