OC: 数组、集合、字典
数组、字典、集合
NSArray * nn = @[@"元素1",@"元素2",@"元素3"];
NSUInteger i = [nn indexOfObject:@"元素1" inRange:NSMakeRange(0, 3)];
NSLog(@"在给定范围内查找给定字符串所在的下标,如果有的话就返回第一个查找到的元素下标%lu --",i);
//NSMakeRange 里面的范围不能超了
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
NSLog(@"Hello, World!");
//OC 里面的数组放的是对象必须是对象(可以存放不同类型的对象) 与 C语言里面的数组不同的是 OC里面的数组可以放不同类型的数据
//数组 不可变数组 NSArry 数组是一个大容器 可以存放不同种 不同类的对象 不仅可以存放字符串 数组
//创建数组 普通方法
NSString * arr = [[NSArray alloc]initWithObjects:@"yingjie",@"liuxian", nil];//最后以 nil 结尾,nil 是数组元素结束的标志 初始化方法是:initWithObjects
//便利构造器写法
NSArray * arr1 = [NSArray arrayWithObjects:@"xiaobing", nil];
//创建一个空的数组
NSArray * arr2 = [NSArray array];
//把数组 arr1 存放到 arr3 里面
NSArray * arr3 = [NSArray arrayWithArray:arr1];
NSLog(@"%@",arr3);//在控制台数组的输出都带一个小括号
//创建一个简单的写法
NSArray * arry = @[@"元素1",@"元素2",@"元素3"];
//获取数组元素个数 count
NSUInteger c = [arry count];
NSLog(@"%lu",c);
//获取数组中某个下标的数组元素
NSString * str = [arry objectAtIndex:];
NSLog(@"%@",str);
//获取数组的首个元素 firstObject 也可以是 objectAtIndex:0
NSString * fist = [arry firstObject];
//获取数组的最后一个元素 lastObject
NSString * last = [arry lastObject];
NSLog(@"%@ %@",fist,last);
//是否包含某个对象元素
BOOL isTrue = [arry containsObject:@""];
NSLog(@"%ld e",isTrue);
//获取数组元素的下标
NSUInteger index = [arry indexOfObject:@"元素1"];
NSLog(@"%ld f",index);
/*//在给定范围内查找给定字符串所在的下标,如果有的话就返回第一个查找到的元素
NSArray * nn = @[@"元素1",@"元素2",@"元素3"];//该例子没有跟上********且有错误
NSUInteger i = [nn indexOfObject:@"2" inRange:NSMakeRange(0, 4)];
NSLog(@"%lu --",i);*/ //数组的比较 比较给定的数组与原来的数组是否相等 isEqualToArray 如果对应的元素不等,改了顺序才等,那也是不相等
BOOL isEqual = [arr1 isEqualTo:arr2];
NSLog(@"%d d",isEqual);
//遍历数组元素
for (int i = ; i < [arry count]; i++) {
NSLog(@"%@ 000",[arry objectAtIndex:i]);
}
//快速遍历、枚举出(数组集合)的方法 在集合 或者数组里查找元素
for (NSString *object in arry) {
// NSLog(@"%@ 111",object);
NSLog(@"%@ 111",object);
}
//for in 在集合里面遍历元素,每遇到一个对象元素都会把元素取出,执行 forin 里面的语句,直到集合里没有对象为止
for (id object in arry) {
// NSLog(@"%@ 111",object);
NSLog(@"%@ 111",object);
} //可变的数组 NSMutableArray 是 NSArray 的子类
//比 NSArray 多的功能是 ???
// 创建一个可见数组 NSMutableArray
NSMutableArray * muArry = [NSMutableArray arrayWithCapacity:];//便利构造器
NSMutableArray * muArry1 = [NSMutableArray arrayWithCapacity:];//普通的方法
//添加数组元素
[muArry addObject:@""];//把不可变数组元素添加到可变的数组中
NSLog(@"%@",muArry);
NSMutableArray * muArry2 = [NSMutableArray arrayWithArray:arry];//便利构造器吧一个数组元素添加到可变数组中
//插入一个数组元素
[muArry insertObject:@"hello" atIndex:];
NSLog(@"%@",muArry);
// [muArry insertObjects:arr atIndexes:set]; //这里是一个集合
//删除一个数组元素
[muArry removeLastObject]; //删除数组中最后一个元素
NSLog(@"%@",muArry);
[muArry removeObjectAtIndex:];
NSLog(@"删除数组中指定下标的元素%@",muArry);
//删除指定范围的元素
[muArry insertObject:@"hello0" atIndex:];
[muArry insertObject:@"hello1" atIndex:];
[muArry insertObject:@"hello2" atIndex:];
[muArry insertObject:@"hello3" atIndex:];
[muArry insertObject:@"hello4" atIndex:];
[muArry removeObject:@"hello4" inRange:NSMakeRange(, )];//这里创造的范围不能超出了
NSLog(@"%@",muArry);
//全部删除数组的元素
[muArry removeAllObjects];
NSLog(@"全部删除数组的元素后:%@",muArry);
[muArry addObjectsFromArray:@[@"z00",@"a11",@"w22",@"f33",@"y44",@"t55",@"r66",@"l77"]];//这里是一个简便的nsarry写法 里面要是写上 汉字的话 打印的是 一行其他的编码
[muArry replaceObjectAtIndex: withObject:@""];//替换第一个元素为11
NSLog(@"%@",muArry);
//交换指定下标的元素对象
[muArry exchangeObjectAtIndex: withObjectAtIndex:];//交换第一个 第二 个元素的对象
NSLog(@"交换指定下标的元素对象%@",muArry);
//对于常用的方法最好是能记住
//对数组排序 Sorts the array’s elements in ascending order, as determined by the comparison method specified by a given selector.
// sortUsingSelector: 对数组的排序
[muArry addObject:@""];
[muArry addObject:@""];//这里的数字是字符串对象
NSArray * ny = [muArry sortedArrayUsingSelector:@selector(compare:)];//这里是对立面的元素进行排序,然后把排好序的数组返回,这里没有操作本身
NSLog(@"%@",ny);
//
[muArry sortUsingSelector:@selector(compare:)];//这里是直接排序,这里是操作了本身
NSLog(@"%@",muArry); }
return ;
}
数组使用
//为空的可变字典添加键值对
[muDic setObject:@"value" forKey:@"key"];//第一次 发现没有 这个键值对 就自动的添加一对
[muDic setObject:@"" forKey:@"key"];//第二次 把上面的 value 的值修改了,前提是有这个 key
// [muDic setValue:@"value" forKey:@"key"];
NSLog(@"%@",muDic);
set forkey 的使用
//字典 存放的是一对 Key-value 值(键值对),通过 key 找到 value
用来存储——————一一对应的关系的数据
一个 value 可以对应多个 key
一个 key 只能对应一个 value
不可变字典:对象创建
字典元素个数(键值对)个数 count
获取所有key allkeys
获取所有的value allValues
获取key 对应的 value objectForKey
遍历 forin
可变字典:对象创建
添加元素(键值对) setObject:ForKey
修改key 对应的value
*/
//创建字典对象
//便利构造器的写法创建了一个不可变的字典
//今天所学集合的总结
/*
NSarry 有序的
NSDictionary 无序的 一个 Key 只对应一个 value ;一个 value 可以对应多个 key
NSSet 无序的 元素的唯一性
他们都是集合:共同性 求集合的元素个数,我们都是用 count 的方法
对象的创建都有两种:初始化 initWithArray ,便利构造器
对集合的一个快速枚举\遍历 forin 对于数组来说遍历的是数组的元素 对于字典来书遍历的是字典的key值 对与集合来说,也是集合中元素的个数
在自己定义的类的时候, 不能用 :NSString 、NSMutableStringn 、 NSArray NSMutableArray、 NSDictionary、 NSMutableDictionary、 NSSet、NSMutableSet、NSCountedSet 做父类 。因为这些类 不是单一的一个类,而是一个类族(多个类的组合)(也可以叫做容器类)
*/
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) {
@autoreleasepool {
/*
//字典 存放的是一对 Key-value 值(键值对),通过 key 找到 value
用来存储——————一一对应的关系的数据
一个 value 可以对应多个 key
一个 key 只能对应一个 value 不可变字典:对象创建
字典元素个数(键值对)个数 count
获取所有key allkeys
获取所有的value allValues
获取key 对应的 value objectForKey
遍历 forin 可变字典:对象创建
添加元素(键值对) setObject:ForKey
修改key 对应的value */ //创建字典对象
//便利构造器的写法创建了一个不可变的字典
// NSDictionary * dic = [NSDictionary dictionaryWithObjects:@"刘洋" forKeys:"name"];//这里是一个不可变字典
//初始化写法
NSDictionary * dic1 = [[NSDictionary alloc]initWithObjectsAndKeys:@"liu yang",@"name", @"xxx",@"gender",@"",@"age",@"98.5",@"score",@"liu yang",@"nn", nil];//字典里不能有多个相同的 key
NSLog(@"%@",dic1);
//字典是无序的 打印的结果是 Key = value;
//字典 key 的个数
NSUInteger count = [dic1 count];
NSLog(@"%lu",count);
//获取字典中 key 对应的 value 的值
NSString * ns = [dic1 valueForKey:@"name"];
NSString * val = dic1 [@"anme"];//简单写法 等于上边
NSLog(@"%@",ns);
[dic1 objectForKey:@"name"];//不确定是个字符串类型
//objectForKey 与 valueForKey 区别
/*
dic1 objectForKey:<#(id)#>
dic1 valueForKey:<#(NSString *)#>
*/
NSString * name = [dic1 valueForKey:@"name"];
NSString * name2 = [dic1 objectForKey:@"name"];
//allKeys 获取字典里所有的 key 值,但并不能保证 返回的顺序是有序的
NSArray * keys = [dic1 allKeys];
NSLog(@"%@",keys);
//获取字典中所有 value 的值
NSArray * values = [dic1 allValues];
NSLog(@"%@",values);
//添加一个键值对 下面方法在文档里找不到 ?KVC
// [dic1 setValue:@"paly" forKey:@"hobby"]; //必须是存在的
// 有问题[dic1 setValue:@"paly" forKey:@"name"];
NSLog(@"%@",keys); //可变字典 NSMutableDictionary
NSMutableDictionary * muDic = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"sunday",@"week",@"",@"day", nil ];
// NSMutableDictionary * muDic2 = [NSMutableDictionary dictionaryWithCapacity:10];//初始化的字典没有一个间组织对
//为空的可变字典添加键值对
[muDic setObject:@"value" forKey:@"key"];//第一次 发现没有 这个键值对 就自动的添加一对
[muDic setObject:@"" forKey:@"key"];//第二次 把上面的 value 的值修改了,前提是有这个 key
// [muDic setValue:@"value" forKey:@"key"];
NSLog(@"%@",muDic);
//对字典的遍历,相当于便利出所有的Key值
for (id object in muDic) {
NSLog(@"%@",object);
}
//崩溃方法 setObject:@"123" forKey:@"key" 是可变字典的修饰方法。所以对于不可变字典不能用
//可变字典与不变字典的转化,把不可变字典用方法copy到可变的字典里面
NSMutableDictionary * dd = [NSMutableDictionary dictionaryWithDictionary:dic1]; //集合 (NSSet)子类 :NSMutableSet
//1.无序的 2.互异性(每个元素都有唯一性) 3.元素的个数只是互异性之后的元素个数
//创建一个集合对象
//NSSet 只有三个方法: count anyObject allObjects 三个方法
NSSet * set = [[NSSet alloc]initWithObjects:@"",@"",@"",@"",@"",@"",@"",@"", nil];
NSLog(@"%@ 有%lu个元素",set,[set count]);
//获取集合中的元素
NSString * str1 = [set anyObject];//获取随机的元素
id str2 = [set anyObject];
NSLog(@"%@",str1);
NSLog(@"%@",str2);
//获取所有的元素
NSArray * asa = [set allObjects];
NSLog(@"%@",asa);
//遍历集合
for (id ob in set) {
NSLog(@"%@",ob);
}
//子类 可变集合 NSMutableSet : NSSet
//创建
NSMutableSet * newSet = [NSMutableSet setWithCapacity:];
//添加元素
[newSet addObject:@"new"];
[newSet addObject:@"old"];
//移除元素(一个)
[newSet removeObject:@"new"];
//移除全部元素
[newSet removeAllObjects]; //计数集合 NSCountSet : NSMutableSet :NSObject
NSCountedSet *countSet = [[NSCountedSet alloc]initWithObjects:@"",@"",@"", @"",@"",@"", nil];
//计算元素出现的次数
NSUInteger num1 = [countSet countForObject:@""];
NSUInteger num2 = [countSet countForObject:@""];
NSLog(@"11出现%lu次 33出现%lu次",num1,num2); //今天所学集合的总结
/*
NSarry 有序的
NSDictionary 无序的 一个 Key 只对应一个 value ;一个 value 可以对应多个 key
NSSet 无序的 元素的唯一性
他们都是集合:共同性 求集合的元素个数,我们都是用 count 的方法
对象的创建都有两种:初始化 initWithArray ,便利构造器
对集合的一个快速枚举\遍历 forin 对于数组来说遍历的是数组的元素 对于字典来书遍历的是字典的key值 对与集合来说,也是集合中元素的个数
在自己定义的类的时候, 不能用 :NSString 、NSMutableStringn 、 NSArray NSMutableArray、 NSDictionary、 NSMutableDictionary、 NSSet、NSMutableSet、NSCountedSet 做父类 。因为这些类 不是单一的一个类,而是一个类族(多个类的组合)(也可以叫做容器类)
*/
}return ;
}
字典学习
1.制作一个联系人信息博 仿照手机通
NSRange 是一个结构体,有两个成员变量 location length
NSString * string1 = @"我是字符串";
NSRange range = [string1 rangeOfString:@"我是"];
NSLog(@"%lu %lu",range.location ,range.length);
rangeOfString:是看一个字符串里面是否有特定的字符串,如果有的话,就返回给NSrange 类型的结构体变量
substringFromIndex 是从下标4的位置开始到结尾,包含4(本例)
substringToIndex 是从开始位置到下标位置(不包含下标位置)
NSString * string1 = @"what a beautiful day";
NSString * string2 = [string1 substringFromIndex:4];
NSString * string3 = [string1 substringToIndex:4];
NSLog(@"%@",string2);
NSLog(@"%@",string3);
字符串也可以这样的初始化(初始化的好几种方法)
NSString * ss = [NSString string ];
ss = @"456";
NSLog(@"%@",ss);
substringWithRange 的使用截取一定范围的字符串
NSString * string1 = @"what a beautiful day";
NSString * string2 = [string1 substringFromIndex:4];
NSString * string3 = [string1 substringToIndex:4];
NSLog(@"%@",string2);
NSLog(@"%@",string3);
NSRange starToend = NSMakeRange(1, 4);
NSString * newString = [string1 substringWithRange:starToend]; //
NSLog(@"%@",newString);
stringByAppendingString:字符串拼接的用法
NSString * string = @"what a beautiful day";
NSString * string1 = [string stringByAppendingString:@"拼接字符串"];
NSLog(@"%@",string1);
stringByAppendingFormat:的用法 拼接给定格式的字符串
NSString * string2 = [string stringByAppendingFormat:@"他今年%d岁",12];
NSLog(@"%@",string2);
stringByReplacingOccurrencesOfString:替换 (本例 吧所有的 a 都替换为 b )
NSString * string3 = [string stringByReplacingOccurrencesOfString:@"a" withString:@"b"];
NSLog(@"%@",string3);
//注意:原来的字符串本身并没有发生改变,仅仅吧输出的形式改变了,以上的都是这样的
stringByReplacingCharactersInRange:NSMakeRange(0, 4) withString:使用
NSString * string4 = [string stringByReplacingCharactersInRange:NSMakeRange(0, 4) withString:@"我换了给定位置的字符串"];
NSLog(@"%@",string4);
比较字符串
NSString * string = @"hellow";
NSString * string1 = @"how";
NSComparisonResult result = [string compare:string1];//结果有三个值 (-1 前者小于后 )(0 前等于后)(1 前大于后)
字符串转换大小写函数
NSString * newTem = [tmpStr lowercaseString];//全部小写
NSString * newTem2 = [tmpStr uppercaseString];//全部大写
NSString * newTem3 = [tmpStr capitalizedString]; //首字母大写(所有的子字符串首字母大写)
//字符串中的数字转化为基本的数字
NSString *numStr = @"234";
NSInteger newNum = [numStr integerValue];//得到长整型数字
NSLog(@"%ld",newNum);
float newNum0 = [numStr floatValue];//转换为浮点型数字
NSLog(@"%.2f",newNum0);
int newNum1 = [numStr intValue];//转化为int整数
NSLog(@"%d",newNum1);
char nam[] = {}, address[] = {};
printf("请输入名字拼音");
scanf("%s",nam);
printf("请输入住址");
scanf("%s",address);
NSString * na = [[NSString alloc]initWithUTF8String:nam];
self->_name = na;//注意要放的顺序,转码一个放一个
NSString * ad = [[NSString alloc]initWithUTF8String:address];
self->_address = ad;
// NSLog(@"%@",na);
return self;//把存有名字 地址的数组传出
OC 与 C 之间的转码使用
OC: 数组、集合、字典的更多相关文章
- OC数组和字典中存入niu值
在NSArray和NSDictionary中nil有特殊的含义.但是某些时候,我们必须要放入nil怎么办? 要想放入nil就必须用到一个类NSNull,这个类只有一个类方法,就是null.[NSNul ...
- OC中如何把数组中字典的数据转换成URL?
在使用objective-c语言开发iOS应用中,会向服务器通过URL请求一些数据,因此对URL的拼接肯定少不了.而在iOS中,我们一般是通过将字典中的数据拼接成我们要请求的URL字符串,那这个是怎么 ...
- 窥探Swift之数组与字典
说到数组和字典,只要是编过程的小伙伴并不陌生.在Swift中的数组与字典也有着一些让人眼前一亮的特性,今天的博客就来窥探一下Swift中的Array和Dictionary.还是沿袭之前的风格,在介绍S ...
- Swift 之数组与字典
http://www.cocoachina.com/swift/20151230/14802.html 说到数组和字典,只要是编过程的小伙伴并不陌生.在Swift中的数组与字典也有着一些让人眼前一亮的 ...
- Objective-C中把数组中字典中的数据转换成URL
可能上面的标题有些拗口,学过PHP的小伙伴们都知道,PHP中的数组的下标是允许我们自定义的,PHP中的数组确切的说就是键值对.而在OC我们要用字典(Dictionary)来存储,当然了Java用的是M ...
- 15.Object-C--浅谈Foundation框架OC数组NSArray与NSMutableArray
昨天总结了一下NSString与NSMutableString,今天我在这里总结一下NSArray与NSMutableArray. NSArray数组是:不可变数组. nil 是数组元素结束的标记.O ...
- OC基础 可变字典与不可变字典的使用
OC基础 可变字典与不可变字典的使用 1.不可变字典 1.1创建不可变字典 //创建字典 //注意: //1,元素个数是偶数 //2,每两个元素是一个键值对 //3,值在前,键在后 NSDiction ...
- 初学swift笔记-数组、字典、元组(三)
数组的使用.字典的使用.元组的使用 import Foundation //1.定义数组 //集合数据 数组.字典 ,,,]//常用定义 ,,,]//常用定义 ,,,]//范型定义 ,,,] arr_ ...
- Swift - 1 (常量、变量、字符串、数组、字典、元组、循环、枚举、函数)
Swift 中导入类库使用import,不再使用<>,导入自定义不再使用"" import Foundation 1> 声明变量和常量 在Swift中使用 &qu ...
- Excel VBA入门(二)数组和字典
数组和字典也是VBA的常用到数据类型之一.但是我翻了有四五本VBA教程相关的书,里面都没有介绍到字典,数组到是在介绍数据类型时有介绍,而并没有提到字典. 事实上,字典不是VBA内置的类型,它是Wind ...
随机推荐
- ecshop 点购物车弹出提示框
1.找到common.js在最下面输入以下代码 * 点击购物后弹出提示层 * Chen 2010.7.28 * 参数 cartinfo:购物车信息 */function openDiv_chen(ca ...
- 【网络】TCP三次握手
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接.第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认:第二次握手: ...
- [转]深入理解Flash Player重绘
这个是tencent flash team的一篇文章,但团队的博客已经关闭了,所以就在这里备份下吧~ 后来有人把这篇文章又发布到9ria上了,引发了一些讨论,其中有两位大神发言了,内容在原文下方. 9 ...
- IClassSchemaEdit修改要素类信息
private void ChangeFeatureClassAliasName(IFeatureClass pFeatureClass, string aliasName) { ISchemaLoc ...
- InnoDB: Error: could not open single-table tablespace file
找到\mysql\bin下面的my.ini中mysqld项目后添加 innodb_force_recovery = 1
- linux中ls命令详解 (转)
-a -- 全部(all).列举目录中的全部文件,包括隐藏文件(.filename).位于这个列表的起首处的 .. 和 . 依次是指父目录和你的当前目录. -l -- 长(long).列举目 ...
- SpringMVC 3.1集成Spring Security 3.1
这篇算是一个入门文章,昨天看见有网友提问,spring mvc集成spring security 的时候出错,揣测了一下问题木有解决.我就帮忙给搭建了一个集成框架他说可以,他告诉我这样的文章网上少.今 ...
- TortoiseSVN 插件配置及使用方法
一.安装和配置 TortoiseSVN的下载地址 32bit:TortoiseSVN-1.8.2.24708-win32-svn-1.8.3.msi 64bit:TortoiseSVN-1.8.2.2 ...
- 查找指定目录下的文件 .xml
pre{ line-height:1; color:#9f1d66; background-color:#cfe4e4; font-size:16px;}.sysFunc{color:#5d57ff; ...
- java中的Switch case语句
java中的Switch case 语句 在Switch语句中有4个关键字:switch,case break,default. 在switch(变量),变量只能是整型或者字符型,程序先读出这个变量的 ...