在oc中数组定义的两个类,分别为:NSArray与NSMutableArray。NSArray是静态的,而NSMUtableArrary是动态数组。他们的一些使用如下:
oc数组特点:
1.数组元素可以是任意的对象
2 .数组中装有元素的地址
3.打印数组的每个元素
4.%@实质是打印一个对象
注意事项如下:
NSArray:
- (NSArray *)arrayByAddingObject:(id)anObject;
- (NSArray *)arrayByAddingObjectsFromArray:(NSArray *)otherArray;
//传入一个元素的地址,返回这个元素的索引
- (NSUInteger)indexOfObject:(id)anObject;
- (NSUInteger)indexOfObject:(id)anObject inRange:(NSRange)range;
NSMutableArray:
//导入另一个数组中的全部元素
- (void)addObjectsFromArray:(NSArray *)otherArray;
//在otherArray中出现的元素,在self中删除
- (void)removeObjectsInArray:(NSArray *)otherArray;
//删除一个范围的元素。起点和个数
- (void)removeObjectsInRange:(NSRange)range;
- (void)insertObjects:(NSArray *)objects atIndexes:(NSIndexSet *)indexes;
#import <Foundation/Foundation.h>
#import "Dog.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
NSLog(@"Hello, World!");
Dog *dog = [[Dog alloc]init];
NSArray *arrray = [[NSArray alloc]initWithObjects:@"one one",@"two",@"three",nil];
//数组元素可以是任意的对象
//数组中装有元素的地址
//打印数组的每个元素
//%@实质是打印一个对象
NSLog(@"%@",arrray);
NSLog(@"%@",dog);
//枚举器法遍历
NSEnumerator *enumerator = [arrray objectEnumerator];
id obj;
while (obj = [enumerator nextObject]) {
NSLog(@"%@",obj);
}
NSLog(@"快速枚举法");
//快速枚举法
for (obj in arrray) {
NSLog(@"%@",arrray);
}
//使用i值进行遍历
NSLog(@"使用i值进行遍历");
//数组的长度
NSUInteger length = [arrray count];
NSLog(@"数组的长度是%lu",length);
obj = [arrray objectAtIndex:2]; //返回单个元素的地址
NSUInteger i;
for (i =0; i<[arrray count]; i++) {
NSLog(@"%@",[arrray objectAtIndex:i]);
}
//可变数组
NSMutableArray *array1 = [[NSMutableArray alloc] init];
[array1 addObject:@"one"];
[array1 addObject:@"two"];
[array1 addObject:@"three"];
//删除数组中的元素(依据内容)
[array1 removeObject:@"one"];
//依据位置来删除内容
//[array1 removeObjectAtIndex:2];
//交换数组中的两个元素的位置
//[array1 exchangeObjectAtIndex:1 withObjectAtIndex:2];
NSLog(@"%@",array1);
//枚举的遍历(利用枚举器)
//使用枚举法进行遍历的时候,如果在遍历过程中对数组进行修改的话,正序遍历是会报错的
//而逆序遍历是不会报错的
NSMutableArray *arry2 = [[NSMutableArray alloc] initWithObjects:@"one",@"two",@"three", nil];
NSEnumerator *en = [arry2 objectEnumerator];
NSString *st;
while (st = [en nextObject]) {
[arry2 removeLastObject];
NSLog(@"%@",st);
}
}
return 0;
}
数组的使用通常伴随着字符串的分割操作,字符串的分割结果可以存放在数组中,然后通过数组对字符串进行我们想要的操作,如下所示的是字符串的分割与拼接操作:
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSString *str = @"I am a so bad man";
NSArray *array = [str componentsSeparatedByString:@" "];
NSArray *array1 = [str componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@" "]];
NSMutableArray *mutableArry = [[NSMutableArray alloc] init];
NSEnumerator *enumerator = [array reverseObjectEnumerator];
id obj;
while (obj = [enumerator nextObject]) {
NSLog(@"%@",obj);
}
//枚举遍历数组,利用逆序
NSEnumerator *enumerator1 = [array1 reverseObjectEnumerator];
while (obj = [enumerator1 nextObject]) {
NSLog(@"%@",obj);
}
//拼接数组
NSString *str2 = [array1 componentsJoinedByString:@"**"];
NSLog(@"%@",str2);
}
return 0;
}
动态数组与静态数组还有很重要的一点就是动态数组能够动态的去增加或者修改数组中的元素,所以涉及到这些操作的话,要考虑去使用动态数组去处理。
好了数组的使用总结完毕,接下来说说字典,字典有点类似于Java中的哈希表,也是一个个键值对组成的数据结构,在oc中字典也分为两种:NSDictionary与NSMutableDictionary,分别是静态与动态,与数组类似,具体使用如下:
静态字典的使用
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
//字典的创建以及初始化
NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys:@"one",@"1", @"two",@"2",@"three",@"3", nil];
//字典中的元素是以键值对的形式存储的
//@"one" 和 @ "1" 组成一个键值对
//@"one" 称为值(value) @"1" 称为键(key)
//键值对的键和值,都是任意的对象,但是键往往使用字符串
//字典存储对象的地址没有顺序
NSLog(@"%@",dict);
//使用枚举法进行遍历,分为键的遍历与值的遍历
NSEnumerator *enumerator = [dict keyEnumerator];
id obj;
while (obj = [enumerator nextObject]) {
NSLog(@"%@",obj);
}
//依据键来获取值
//NSString *str = [dict objectForKey:@"1"];
//快速遍历的方法
for(obj in dict){
NSLog(@"键%@ 键值:%@",obj,[dict objectForKey:obj]);
}
}
return 0;
}
动态数组的使用
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
//动态添加字典元素
[dict setObject:@"One" forKey:@"1"];
[dict setObject:@"Two" forKey:@"2"];
[dict setObject:@"Three" forKey:@"3"];
//枚举法快速遍历字典
NSEnumerator *enumerator = [dict objectEnumerator];
id obj;
while (obj = [enumerator nextObject]) {
NSLog(@"%@",obj);
}
//快速遍历法遍历
for (obj in dict) {
NSLog(@"键%@ 键值%@",obj,[dict objectForKey:obj]);
}
//移除字典键
[dict removeObjectForKey:@"1"];
NSLog(@"%@",dict);
}
return 0;
}
字典的使用我们会经常用到,因为它读取速度快,相比数组它不用遍历查找元素,而是直接通过键来直接指定具体的值,所以效率很高,但是字典是没有顺序的,第一个与最后一个键值是相同地位的,这是字典的特点。
下面继续列一些习题,方便自学的好孩子去加深对数组与字典的印象(不懂的可以私信我哦):
完成一个英汉字典的类
方法:
1.传入英文
2.返回中文
3.构造方法读取文件内容
好了,数组与字典就到此吧!