----------------------
ASP.Net+Unity开发、
.Net培训、期待与您交流! ----------------------
---------------------- ASP.Net+Unity开发、 .Net培训、期待与您交流! ----------------------
NSArray
首先要知道的是oc数组只能存储oc对象,不能存放非oc对象类型,比如int和struct。
NSArray和NSString一样也分为可改变和不可改变的子类NSMutabaleArray
下面就是MJ老师的代码
#import <Foundation/Foundation.h>
#import "Person.h"
/*
NSArray :不可变数组
NSMutableArray : 可变数组
*/
int main()
{
// @[] 只创建不可变数组NSArray
/* 错误写法
NSMutableArray *array = @[@"jack", @"rose"];
[array addObject:@"jim"];
*/
//NSArray *array = @[@"jack", @"rose"];
return 0;
}
// 可变数组的基本使用
void use3()
{
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"rose", @"jim", nil];
// 添加元素
[array addObject:[[Person alloc] init]];
[array addObject:@"jack"];
// 删除元素
//[array removeAllObjects];
// 删除指定的对象
// [array removeObject:@"jack"];
[array removeObjectAtIndex:0];
// 错误写法
// [array addObject:nil];
NSLog(@"%@", array);
NSLog(@"%ld", array.count);
}
// 遍历数组
void use2()
{
Person *p = [[Person alloc] init];
NSArray *array = @[p, @"rose", @"jack"];
// for (int i = 0; i<array.count; i++)
// {
// NSLog(@"%@", array[i]);
// }
// id obj代表着数组中的每一个元素
//int i = 0;
// for (id obj in array)
// {
// // 找出obj元素在数组中的位置
// NSUInteger i = [array indexOfObject:obj];
//
// NSLog(@"%ld - %@", i, obj);
// //i++;
//
// if (i==1)
// {
// break;
// }
// }
[array enumerateObjectsUsingBlock:
// 每遍历到一个元素,就会调用一次block
// 并且当前元素和索引位置当做参数传给block
^(id obj, NSUInteger idx, BOOL *stop)
{
NSLog(@"%ld - %@", idx, obj);
if (idx == 0)
{
// 停止遍历
*stop = YES;
}
}];
// void ^(myblock)(id, NSUInteger, BOOL *) = ^(id obj, NSUInteger idx, BOOL *stop)
// {
// NSLog(@"%ld - %@", idx, obj);
//
//
// if (idx == 0)
// {
// // 停止遍历
// *stop = YES;
// }
// };
//
// for (int i = 0; i<array.count; i++)
// {
// // 用来标记是否需要停止遍历
// BOOL isStop = NO;
//
// // 取出元素
// id obj = array[i];
//
// myblock(obj, i, &isStop);
//
//
// if (isStop)
// {
// break;
// }
// }
}
void use()
{
/*
int a = 5;
int ages[10] = {1, 90, 89, 17};
Person *p = [[Person alloc] init];
Person *persons[5] = {p, [[Person alloc] init]};
*/
// OC数组不能存放nil值
// OC数组只能存放OC对象、不能存放非OC对象类型,比如int、struct、enum等
// 这个array永远是空数组
// NSArray *array = [NSArray array];
/*
1.NSArray的创建
*/
NSArray *array2 = [NSArray arrayWithObject:@"jack"];
// nil是数组元素结束的标记
NSArray *array3 = [NSArray arrayWithObjects:@"jack", @"rose", nil];
// [array2 count];
//NSArray *array4 = [NSArray arrayWithObjects:@"jack", @"rose", @"4324324", nil];
// 快速创建一个NSArray对象
NSArray *array4 = @[@"jack", @"rose", @"4324324"];
/*
2.NSArray的元素个数
*/
NSLog(@"%ld", array3.count);
/*
3.NSArray中元素的访问
*/
NSLog(@"%@", [array3 objectAtIndex:1]);
//array3[1];
NSLog(@"%@", array3[0]);
}
NSSet
NSSet和NSArray差不多,都是集合
NSSet和NSArray的对比
1,共同点
都是集合,都能存放多个OC对象
只能存放OC对象,不能存放非OC对象类型(基本数据类型:int、char、float等,结构体,枚举)
本身都不可变,都有一个可变的子类
2,不同点
NSArray有顺序,NSSet没有顺序
因此在取出集合中的元素的时候有随机取出的方法
<span style="font-size:14px;">#import <Foundation/Foundation.h>
// set的基本使用
void test()
{
NSSet *s = [NSSet set];
NSSet *s2 = [NSSet setWithObjects:@"jack",@"rose", @"jack2",@"jack3",nil];
// 随机拿出一个元素
NSString *str = [s2 anyObject];
NSLog(@"%@", str);
//NSLog(@"%ld", s2.count);
}
int main()
{
NSMutableSet *s = [NSMutableSet set];
// 添加元素
[s addObject:@"hack"];
// 删除元素
// [s removeObject:<#(id)#>];
test();
return 0;
</span>
NSDictionary
也相当于一个集合,不过它和NSArray,NSSet还是有区别的
集合
1.NSArray\NSMutableArray
有序
快速创建(不可变):@[obj1, obj2, obj3]
快速访问元素:数组名[i]
2.NSSet\NSMutableSet
无序
3.NSDictionary\NSMutableDictionary
无序
快速创建(不可变):@{key1 : value1, key2 : value2}
快速访问元素:字典名[key]
下面就是按照MJ老师练习的代码
<span style="font-size:14px;">#import <Foundation/Foundation.h>
int main()
{
NSArray *persons = @[
@{@"name" : @"jack", @"qq" : @"432423423", @"books": @[@"5分钟突破iOS编程", @"5分钟突破android编程"]},
@{@"name" : @"rose", @"qq" : @"767567"},
@{@"name" : @"jim", @"qq" : @"423423"},
@{@"name" : @"jake", @"qq" : @"123123213"}
];
//
// NSDictionary *jim = persons[2];
//
NSString *bookName = persons[0][@"books"][1];
NSLog(@"%@", bookName);
//NSArray *array = persons[0][@"books"];
//NSLog(@"%@", array);
// 先取出1位置对应的字典
// 再取出字典中qq这个key对应的数据
//NSLog(@"%@", persons[1][@"qq"]);
// NSLog(@"%@", jim);
return 0;
}
void use4()
{
// 字典不允许有相同的key,但允许有相同的value(Object)
// 字典的无序的
NSDictionary *dict = @{
@"address" : @"北京",
@"name" : @"jack",
@"name2" : @"jack",
@"name3" : @"jack",
@"qq" : @"7657567765"};
// NSArray *keys = [dict allKeys];
//
// for (int i = 0; i<dict.count; i++)
// {
// NSString *key = keys[i];
// NSString *object = dict[key];
//
//
// NSLog(@"%@ = %@", key, object);
// }
[dict enumerateKeysAndObjectsUsingBlock:
^(id key, id obj, BOOL *stop) {
NSLog(@"%@ - %@", key, obj);
// *stop = YES;
}];
}
void use3()
{
NSMutableDictionary *dict = @{@"name" : @"jack"};
[dict setObject:@"rose" forKey:@"name"];
}
void use2()
{
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
// 添加键值对
[dict setObject:@"jack" forKey:@"name"];
[dict setObject:@"北京" forKey:@"address"];
[dict setObject:@"rose" forKey:@"name"];
// 移除键值对
// [dict removeObjectForKey:<#(id)#>];
NSString *str = dict[@"name"];
//NSLog(@"%@", str);
NSLog(@"%@", dict);
//NSLog(@"%@", @[@"jack", @"rose"]);
}
void use()
{
/*
字典:
key ----> value
索引 ----> 文字内容
里面存储的东西都是键值对
*/
// NSDictionary *dict = [NSDictionary dictionaryWithObject:@"jack" forKey:@"name"];
// NSArray *keys = @[@"name", @"address"];
// NSArray *objects = @[@"jack", @"北京"];
// NSDictionary *dict = [NSDictionary dictionaryWithObjects:objects forKeys:keys];
/*
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
@"jack", @"name",
@"北京", @"address",
@"32423434", @"qq", nil];*/
NSDictionary *dict = @{@"name" : @"jack", @"address" : @"北京"};
// id obj = [dict objectForKey:@"name"];
id obj = dict[@"name"];
NSLog(@"%@", obj);
// 返回的是键值对的个数
NSLog(@"%ld", dict.count);
}</span>
剩下的NSNumber等就下篇博客在说了
---------------------- ASP.Net+Unity开发、 .Net培训、期待与您交流! ----------------------