NSArray,NSSet,NSEnumerator,NSDictionary及对应Mutable介绍

OpenBullet2 学习研究2-Conditions条件之KeyCheck的使用 上一节我们学习了如何安装Openbullet2以及如何新建一个配置,最后我们再配置里面新建一个Http的请求块,帮助我们发送了第一个请请求。这一节我们来学习check块。当我们发送请求以后,请求返回的内容是否是我们想要的,或者请求发送正确没有,这个我们怎么判断呢?这个时候就要用到check块了。 阅读详情

NSArray,NSSet,NSEnumerator,NSDictionary及对应Mutable介绍



上述的这些都是 Objective-C 中的集合类,不带 Mutable 的是不可修改的集合类, 带 Mutable 的是可以修改的集合类。下面的例子中有足够的注释,非常清晰,不多说了。



1. NSArray与NSMutableArray

就是通常的数组,其中的每一个元素有各自确定的唯一序号,元素可以重复


2. NSSet与NSMutableSet

就是通常的集合,其中的元素没有确定的序号(即遍历的顺序与加入集合的顺序没有任何关系),但决不重复(若加入相同元素则会覆盖之前的)


3. NSEnumerator(没有NSMutableEnumerator )

类似于NSArray,一般不单独使用。只是作为 NSArray,NSSet 和 NSDictionary 的辅助类(它们都有相应的方法转换为NSEnumerator)。特别要注意 NSEnumerator 中的元素一旦遍历过之后就不能重新遍历,必须重新创建一个NSEnumerator。


4. NSDictionary与NSMutableDictionary

就是我们常说的键值对(Key-Value),每一个元素包含一个Key和一个Value。通过Key可以查到它对应的Value。

注意和NSSet一样,NSDictionary 中元素的顺序也是不确定的。






下面是例子:



1.

创建一个View-based Application,名称是test




2.

修改 TestViewController.m 如下:

//
//  TestViewController.m
//  Test
//
//  Created by HuTao on 8/19/12.
//  Copyright __MyCompanyName__ 2012. All rights reserved.
//

#import "TestViewController.h"

@implementation TestViewController



-(void)testNSArray
{
	//创建一个 NSArray,必须以 nil 结尾
	NSArray * array = [NSArray arrayWithObjects:@"Mike", @"Ben", @"Alice", @"Jane", @"Bob", @"Peter", @"Tom", @"Sam", nil];
	//或:
	//NSArray * array = [[NSArray alloc] initWithObjects:@"Mike", @"Ben", @"Alice", @"Jane", @"Bob", @"Peter", @"Tom", @"Sam", nil];	

	
	//得到 NSArray 的数量
	int count = [array count];
	NSLog(@"NSArray的数量: %d", count);
	
	//判断 NSArray 中是否包含某项
	if([array containsObject:@"Bob"])
	{
		NSLog(@"含有Bob");
	}
	else
	{
		NSLog(@"不含有Bob");
	}

	if([array containsObject:@"Linda"])
	{
		NSLog(@"含有Linda");
	}
	else
	{
		NSLog(@"不含有Linda");
	}
	
	//根据值判断在 NSArray 中的第一个的序号(从0开始算),不存在则返回 NSNotFound
	NSLog(@"Bob在第%d项", [array indexOfObject:@"Bob"]);
	
	if([array indexOfObject:@"Linda"] == NSNotFound)
	{
	   NSLog(@"没有找到Linda");
	}
	else
	{
		NSLog(@"找到Linda");
	}
	
	//获取指定序号的项(从0开始算)
	NSLog(@"第%d项是%@", 2, [array objectAtIndex:2]);
	
	//遍历 NSArray
	for(NSString * a in array)
	{
		NSLog(@"遍历NSArray: %@", a);
	}
}


-(void)testNSMutableArray
{
	//创建一个空的 NSMutableArray 数组,无需手动释放
	NSMutableArray * array = [NSMutableArray array];
	//已有元素时,也可以按如下创建:
	//NSMutableArray * array = [NSMutableArray arrayWithObjects:@"One", @"Two", @"Three", nil];

	
	//在最后添加项
	[array addObject:@"Mike"];
	[array addObject:@"Alice"];  
	[array addObject:@"Tom"];  
	[array addObject:@"Ben"];  
	[array addObject:@"Peter"];  
	[array addObject:@"Sam"];  
	
	//将另一个数组也添加进来
	NSMutableArray * array2 = [NSMutableArray array];
	[array addObject:@"Linda"];
	[array addObject:@"John"]; 
	[array addObjectsFromArray:array2];

	
	//在指定位置添加项(在第atIndex项之前插入)
	[array insertObject:@"Bob" atIndex:2];
	
	//遍历 NSArray
	for(NSString * a in array)
	{
		NSLog(@"插入后的NSArray: %@", a);
	}
	

	//替换项
	[array replaceObjectAtIndex:4 withObject:@"David"];  
	
	//遍历 NSArray
	for(NSString * a in array)
	{
		NSLog(@"替换后的NSArray: %@", a);
	}
	
	
	//删除最后的项
	[array removeLastObject];  
	
	//加入重复项
	[array addObject:@"Alice"]; 

	//删除指定位置的项  
	[array removeObjectAtIndex:5];  
	
	//删除所有等于Alice的项 
	[array removeObject:@"Alice"];  
	
	//遍历 NSArray
	for(NSString * a in array)
	{
		NSLog(@"删除后的NSArray: %@", a);
	}
	
	
	//删除数组中所有与数组array包含相同的元素  
	NSMutableArray * array3 = [NSMutableArray array];
	[array3 addObject:@"Sam"]; 
	[array3 addObject:@"Mike"];
	[array3 addObject:@"John"]; 
	[array removeObjectsInArray:array3];  
	
	//遍历 NSArray
	for(NSString * a in array)
	{
		NSLog(@"删除指定数组项后的NSArray: %@", a);
	}
	
	
	//删除所有对象  
	[array removeAllObjects];  
	
	
	//得到 NSMutableArray 的数量
	int count = [array count];
	NSLog(@"NSMutableArray的数量: %d", count);
	
	
	//将 NSArray 转成 NSMutableArray
	NSArray * array4 = [[NSArray alloc] initWithObjects:@"a", @"b", @"c", @"d", nil];
	NSMutableArray * array5 = [NSMutableArray arrayWithArray:array4];
	NSLog(@"转换后的 NSMutableArray: %@", array5);
}



-(void)testNSSet
{
	//NSSet 中的元素是无序且唯一的
	NSArray * array1 = [NSArray arrayWithObjects:@"Orange", @"Apple", @"Pear", @"Banana", @"Melon", nil];
	NSArray * array2 = [NSArray arrayWithObjects:@"Melon", @"Banana", @"Orange", @"Pear", @"Apple", nil];
	
	NSSet * set1 = [NSSet setWithArray:array1];
	NSSet * set2 = [NSSet setWithArray:array2];
	//也可以如下创建NSSet,但必须以 nil 结尾
	NSSet * set3 = [NSSet setWithObjects:@"Banana", @"Pear", @"Apple", nil];
	
	//得到NSSet的数量
	int count = [set1 count];
	NSLog(@"NSSet的数量: %d", count);
	
	NSString * s;
	
	//遍历NSSet,注意顺序是无序的,遍历结束返回nil
	//虽然含有相同元素,但set1和set2的遍历顺序却是不同的(或者每次遍历的顺序都不是相同的)
	for(s in set1)
	{
		NSLog(@"遍历NSSet1: %@", s);
	}
	for(s in set2)
	{
		NSLog(@"遍历NSSet2: %@", s);
	}
	
	//也可以这样遍历
	NSEnumerator * enumerator = [set1 objectEnumerator];  
	for(s in enumerator)
	{  
		NSLog(@"NSEnumerator遍历NSSet: %@", s);  
	}  
	
	
	//判断是否含有Banana字符串  
	if([set1 containsObject:@"Banana"])
	{  
		NSLog(@"NSSet包含Banana");  
	}
	else
	{  
		NSLog(@"NSSet不包含Banana");  
	}
	
	//判断 set1 是否等于set2(只要含有相同的元素且集合中的元素个数相等即这两个set相等)
	if([set1 isEqualToSet:set2])
	{  
		NSLog(@"set1 等于 set2");  
	}
	else
	{
		NSLog(@"set1 不等于 set2");  
	}
	
	//判断set3是否是set1的子集合  
	if ([set3 isSubsetOfSet:set1])
	{  
		NSLog(@"set3 是 set1 的子集");  
	}
	else
	{  
		NSLog(@"set3 不是 set1 的子集");  
	}
	
	//获取所有NSSet对象  
	NSArray * array4 = [set1 allObjects];
	NSArray * array5 = [set2 allObjects];
	
	for(s in array4)
	{
		NSLog(@"allObjects set1: %@", s);  
	}
	for(s in array5)
	{
		NSLog(@"allObjects set2: %@", s);  
	}
}


-(void)testNSMutableSet
{
	//定义 NSMutableSet
	NSMutableSet * set1 = [NSMutableSet setWithObjects:@"Orange", @"Apple", @"Pear", @"Banana", @"Melon", nil];
	NSMutableSet * set2 = [NSMutableSet setWithObjects:@"Orange", @"Apple", @"Pear", @"Banana", @"Melon", nil];
	NSMutableSet * set3 = [NSMutableSet setWithObjects:@"Orange", @"Apple", @"Pear", @"Banana", @"Melon", nil];
	//定义一个初始长度为6的NSMutableSet
	NSMutableSet * set4 = [NSMutableSet setWithCapacity:6];
	NSMutableSet * set5 = [NSMutableSet setWithObjects:@"Banana", @"Pear", @"Apple", nil];
	
	NSString * s;
	
	//遍历NSMutableSet
	for(s in set1)
	{
		NSLog(@"遍历NSSet1: %@", s);
	}
	
	//加入元素
	[set4 addObject:@"Pear"];
	[set4 addObject:@"Banana"];
	[set4 addObject:@"Orange"];
	[set4 addObject:@"Pear"];
	[set4 addObject:@"Melon"];
	
	//加入重复的元素会被忽略
	int count = [set4 count];
	NSLog(@"set4的数量: %d", count);
	
	//删除set1中所有包含在set5中的元素
	[set1 minusSet:set5];
	for(s in set1)
	{
		NSLog(@"minus后遍历set1: %@", s);
	}
	
	//将set2与set5的交集赋值到set2
	[set2 intersectSet:set5];
	for(s in set2)
	{
		NSLog(@"intersectSet后遍历set2: %@", s);
	}
	
	//将set3与set5并集赋值到set3
	[set3 unionSet:set5];
	for(s in set3)
	{
		NSLog(@"unionSet后遍历set3: %@", s);
	}
	
	
	//将NSArray中的数据加入NSMutableSet
	NSMutableSet * set6 = [NSMutableSet setWithCapacity:3];
	NSArray * array = [NSArray arrayWithObjects:@"Mike", @"Ben", @"Alice", @"Jane", @"Bob", @"Peter", @"Tom", @"Sam", nil];
	[set6 addObjectsFromArray:array];
	for(s in set6)
	{
		NSLog(@"addObjectsFromArray后遍历set6: %@", s);
	}
	
	
	//过滤NSMutableSet
	NSMutableSet * set7 = [NSMutableSet setWithObjects:@"One", @"Two", @"Three", @"Four", nil];
	NSPredicate * predicate = [NSPredicate predicateWithFormat:@"SELF beginswith 'T'"];
	[set7 filterUsingPredicate:predicate];
	//过滤后set7中只含有Two和Three
	for(s in set7)
	{
		NSLog(@"过滤后遍历set7: %@", s);
	}
	
	//删除指定元素
	[set1 removeObject:@"Melon"];
	for(s in set1)
	{
		NSLog(@"删除Melon后遍历set1: %@", s);
	}
	//删除不存在的元素不会出错
	[set1 removeObject:@"grape"];
	for(s in set1)
	{
		NSLog(@"删除grape后遍历set1: %@", s);
	}
	
	//删除所有元素
	[set1 removeAllObjects];
	NSLog(@"删除所有元素后set1的数量: %d", [set1 count]);
}



-(void)testNSEnumerator
{
	//集合类(如:NSArray、NSSet、NSDictionary等)均可获取到NSEnumerator
	//NSEnumerator的nextObject方法可以遍历每个集合元素,结束返回nil,通过与while结合使用可遍历集合中所有项。
	NSArray * array = [NSArray arrayWithObjects:@"Orange", @"Apple", @"Pear", @"Banana", @"Melon", nil];
	
	//通过objectEnumberator获取集合的NSEnumerator,reverseObjectEnumerator反向获取
	NSEnumerator * enumerator1 = [array objectEnumerator];
	NSEnumerator * enumerator2 = [array reverseObjectEnumerator];
	NSEnumerator * enumerator3 = [array objectEnumerator];
	
	NSString * s;  
	//注意:使用nextObject遍历NSEnumerator是永久性的,即遍历后将不可重新遍历,只能重新创建新NSEnumerator
	while(s = [enumerator1 nextObject])
	{
		NSLog(@"遍历NSEnumerator1: %@", s);
	}
	while(s = [enumerator2 nextObject])
	{
		NSLog(@"遍历NSEnumerator2: %@", s);
	}
	
	//注意:使用nextObject遍历NSEnumerator是永久性的,即遍历后将不可重新遍历,只能重新创建新NSEnumerator
	[enumerator3 nextObject];
	[enumerator3 nextObject];
	[enumerator3 nextObject];
	
	//allObjects 返回剩余没有被nextObject遍历到的元素
	NSArray * a1 = [enumerator1 allObjects];
	NSArray * a2 = [enumerator3 allObjects];
	
	//由于之前已经遍历完enumerator1,因此不会打印
	for(s in a1)
	{
		NSLog(@"NSEnumerator1 allObjects: %@", s);
	}
	
	//只会打印出最后两项
	for(s in a2)
	{
		NSLog(@"NSEnumerator3 allObjects: %@", s);
	}
	
}


-(void)testNSDictionary
{
	/* 用 NSDictionary 创建不可变Dictionary */
	NSString * s;
	
	//初始化一个 NSDictionary,顺序是 value1, key1, value2, key2 ......,必须以 nil 结尾
	NSDictionary * dict = [NSDictionary dictionaryWithObjectsAndKeys:
							@"Tom", @"name",
							@"20", @"age",
							@"Male", @"sex", nil];
	
	
	//得到词典的数量
	int count = [dict count];
	NSLog(@"词典的数量: %d", count);
	
	//将所有KEY储存在 NSEnumerator 中
	NSEnumerator * enumeratorKey = [dict keyEnumerator];
	
	//遍历所有KEY值
	for(s in enumeratorKey)
	{
		NSLog(@"遍历KEY的值: %@", s);
	}
	
	//将所有Value储存在 NSEnumerator 中
	NSEnumerator * enumeratorValue = [dict objectEnumerator];
	
	//快速枚举遍历所有Value值
	for(s in enumeratorValue)
	{
		NSLog(@"遍历Value的值: %@", s);
	}
	
	//通过KEY找到Value,没有找到返回nil
	s = [dict objectForKey:@"age"];
	if (s != nil)
	{
		NSLog(@"通过KEY找到的value是: %@", s);
	}
	else
	{
		NSLog(@"没有找到KEY对应的Value");
	}
	
}


-(void)testNSMutableDictionary
{
	/* 用 NSMutableDictionary 创建不可变Dictionary */
	NSString * s;

	//创建一个可变Dictionary,初始长度为10,如果后面动态添加的数据超过10,
	//则 NSMutableDictionary 长度会自动增加,所以不用担心数组越界
	NSMutableDictionary * dict = [NSMutableDictionary dictionaryWithCapacity:10];
	//或者 NSMutableDictionary * dict = [NSMutableDictionary initWithCapacity:10]; 也可以
	
	//加入 Key-Value 对
	[dict setObject:@"Tom"  forKey:@"name"];
	[dict setObject:@"20"   forKey:@"age"];
	[dict setObject:@"Male" forKey:@"sex"];

	//通过KEY找到value
	s = [dict objectForKey:@"sex"];
	if (s != nil)
	{
		NSLog(@"修改前value: %@", s);
	}
	else
	{
		NSLog(@"没有找到KEY对应的Value");
	}
	
	//如果KEY相同则会直接覆盖
	[dict setObject:@"Female" forKey:@"sex"];
	
	s = [dict objectForKey:@"sex"];
	if (s != nil)
	{
		NSLog(@"修改后value: %@", s);
	}
	else
	{
		NSLog(@"没有找到KEY对应的Value");
	}
	
	//也可以这样遍历
	//获取包含所有KEY的数组
	NSArray * keys = [dict allKeys];
	for(s in keys)
	{
		NSLog(@"%@ is %@", s, [dict objectForKey:s]);
	}
	

	//删除Dictionary中指定项的数据
	[dict removeObjectForKey:@"name"];
	
	NSLog(@"删除前数量:%d", [dict count]);
	
	//删除Dictionary中的所有数据
	[dict removeAllObjects];
	
	NSLog(@"删除后数量:%d", [dict count]);	
}



// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad
{
	[super viewDidLoad];
	
	//NSArray 与 NSMutableArray
	[self testNSArray];
	[self testNSMutableArray];
	
	//NSSet 与 NSMutableSet
	[self testNSSet];
	[self testNSMutableSet];
	
	//NSEnumerator
	[self testNSEnumerator];

	//NSDictionary 与 NSMutableDictionary
	[self testNSDictionary];
	[self testNSMutableDictionary];
}


- (void)dealloc
{
	[super dealloc];
}


@end





运行程序,Console输出结果如下:







由于输出太多,无法全部截图,下面是全部输出:


[Session started at 2012-08-21 12:14:21 +0000.]
2012-08-21 12:14:26.907 Test[1501:207] ******* Accessibility Status Changed: On
2012-08-21 12:14:26.954 Test[1501:207] ********** Loading AX for: com.yourcompany.Test ************
2012-08-21 12:14:27.013 Test[1501:207] NSArray的数量: 8
2012-08-21 12:14:27.014 Test[1501:207] 含有Bob
2012-08-21 12:14:27.015 Test[1501:207] 不含有Linda
2012-08-21 12:14:27.016 Test[1501:207] Bob在第4项
2012-08-21 12:14:27.017 Test[1501:207] 没有找到Linda
2012-08-21 12:14:27.018 Test[1501:207] 第2项是Alice
2012-08-21 12:14:27.019 Test[1501:207] 遍历NSArray: Mike
2012-08-21 12:14:27.020 Test[1501:207] 遍历NSArray: Ben
2012-08-21 12:14:27.021 Test[1501:207] 遍历NSArray: Alice
2012-08-21 12:14:27.022 Test[1501:207] 遍历NSArray: Jane
2012-08-21 12:14:27.024 Test[1501:207] 遍历NSArray: Bob
2012-08-21 12:14:27.025 Test[1501:207] 遍历NSArray: Peter
2012-08-21 12:14:27.026 Test[1501:207] 遍历NSArray: Tom
2012-08-21 12:14:27.027 Test[1501:207] 遍历NSArray: Sam
2012-08-21 12:14:27.029 Test[1501:207] 插入后的NSArray: Mike
2012-08-21 12:14:27.030 Test[1501:207] 插入后的NSArray: Alice
2012-08-21 12:14:27.031 Test[1501:207] 插入后的NSArray: Bob
2012-08-21 12:14:27.032 Test[1501:207] 插入后的NSArray: Tom
2012-08-21 12:14:27.033 Test[1501:207] 插入后的NSArray: Ben
2012-08-21 12:14:27.034 Test[1501:207] 插入后的NSArray: Peter
2012-08-21 12:14:27.036 Test[1501:207] 插入后的NSArray: Sam
2012-08-21 12:14:27.037 Test[1501:207] 插入后的NSArray: Linda
2012-08-21 12:14:27.038 Test[1501:207] 插入后的NSArray: John
2012-08-21 12:14:27.039 Test[1501:207] 替换后的NSArray: Mike
2012-08-21 12:14:27.040 Test[1501:207] 替换后的NSArray: Alice
2012-08-21 12:14:27.041 Test[1501:207] 替换后的NSArray: Bob
2012-08-21 12:14:27.042 Test[1501:207] 替换后的NSArray: Tom
2012-08-21 12:14:27.043 Test[1501:207] 替换后的NSArray: David
2012-08-21 12:14:27.044 Test[1501:207] 替换后的NSArray: Peter
2012-08-21 12:14:27.045 Test[1501:207] 替换后的NSArray: Sam
2012-08-21 12:14:27.047 Test[1501:207] 替换后的NSArray: Linda
2012-08-21 12:14:27.048 Test[1501:207] 替换后的NSArray: John
2012-08-21 12:14:27.049 Test[1501:207] 删除后的NSArray: Mike
2012-08-21 12:14:27.051 Test[1501:207] 删除后的NSArray: Bob
2012-08-21 12:14:27.052 Test[1501:207] 删除后的NSArray: Tom
2012-08-21 12:14:27.053 Test[1501:207] 删除后的NSArray: David
2012-08-21 12:14:27.054 Test[1501:207] 删除后的NSArray: Sam
2012-08-21 12:14:27.056 Test[1501:207] 删除后的NSArray: Linda
2012-08-21 12:14:27.057 Test[1501:207] 删除指定数组项后的NSArray: Bob
2012-08-21 12:14:27.058 Test[1501:207] 删除指定数组项后的NSArray: Tom
2012-08-21 12:14:27.059 Test[1501:207] 删除指定数组项后的NSArray: David
2012-08-21 12:14:27.060 Test[1501:207] 删除指定数组项后的NSArray: Linda
2012-08-21 12:14:27.061 Test[1501:207] NSMutableArray的数量: 0
2012-08-21 12:14:27.062 Test[1501:207] 转换后的 NSMutableArray: (
    a,
    b,
    c,
    d
)
2012-08-21 12:14:27.063 Test[1501:207] NSSet的数量: 5
2012-08-21 12:14:27.066 Test[1501:207] 遍历NSSet1: Melon
2012-08-21 12:14:27.067 Test[1501:207] 遍历NSSet1: Apple
2012-08-21 12:14:27.068 Test[1501:207] 遍历NSSet1: Orange
2012-08-21 12:14:27.069 Test[1501:207] 遍历NSSet1: Pear
2012-08-21 12:14:27.070 Test[1501:207] 遍历NSSet1: Banana
2012-08-21 12:14:27.071 Test[1501:207] 遍历NSSet2: Banana
2012-08-21 12:14:27.072 Test[1501:207] 遍历NSSet2: Apple
2012-08-21 12:14:27.073 Test[1501:207] 遍历NSSet2: Orange
2012-08-21 12:14:27.074 Test[1501:207] 遍历NSSet2: Pear
2012-08-21 12:14:27.075 Test[1501:207] 遍历NSSet2: Melon
2012-08-21 12:14:27.077 Test[1501:207] NSEnumerator遍历NSSet: Melon
2012-08-21 12:14:27.078 Test[1501:207] NSEnumerator遍历NSSet: Apple
2012-08-21 12:14:27.080 Test[1501:207] NSEnumerator遍历NSSet: Orange
2012-08-21 12:14:27.081 Test[1501:207] NSEnumerator遍历NSSet: Pear
2012-08-21 12:14:27.082 Test[1501:207] NSEnumerator遍历NSSet: Banana
2012-08-21 12:14:27.084 Test[1501:207] NSSet包含Banana
2012-08-21 12:14:27.085 Test[1501:207] set1 等于 set2
2012-08-21 12:14:27.086 Test[1501:207] set3 是 set1 的子集
2012-08-21 12:14:27.087 Test[1501:207] allObjects set1: Melon
2012-08-21 12:14:27.088 Test[1501:207] allObjects set1: Apple
2012-08-21 12:14:27.089 Test[1501:207] allObjects set1: Orange
2012-08-21 12:14:27.091 Test[1501:207] allObjects set1: Pear
2012-08-21 12:14:27.092 Test[1501:207] allObjects set1: Banana
2012-08-21 12:14:27.093 Test[1501:207] allObjects set2: Banana
2012-08-21 12:14:27.094 Test[1501:207] allObjects set2: Apple
2012-08-21 12:14:27.095 Test[1501:207] allObjects set2: Orange
2012-08-21 12:14:27.096 Test[1501:207] allObjects set2: Pear
2012-08-21 12:14:27.097 Test[1501:207] allObjects set2: Melon
2012-08-21 12:14:27.098 Test[1501:207] 遍历NSSet1: Melon
2012-08-21 12:14:27.099 Test[1501:207] 遍历NSSet1: Apple
2012-08-21 12:14:27.100 Test[1501:207] 遍历NSSet1: Orange
2012-08-21 12:14:27.101 Test[1501:207] 遍历NSSet1: Pear
2012-08-21 12:14:27.102 Test[1501:207] 遍历NSSet1: Banana
2012-08-21 12:14:27.103 Test[1501:207] set4的数量: 4
2012-08-21 12:14:27.104 Test[1501:207] minus后遍历set1: Melon
2012-08-21 12:14:27.105 Test[1501:207] minus后遍历set1: Orange
2012-08-21 12:14:27.106 Test[1501:207] intersectSet后遍历set2: Apple
2012-08-21 12:14:27.108 Test[1501:207] intersectSet后遍历set2: Pear
2012-08-21 12:14:27.109 Test[1501:207] intersectSet后遍历set2: Banana
2012-08-21 12:14:27.110 Test[1501:207] unionSet后遍历set3: Melon
2012-08-21 12:14:27.111 Test[1501:207] unionSet后遍历set3: Apple
2012-08-21 12:14:27.112 Test[1501:207] unionSet后遍历set3: Orange
2012-08-21 12:14:27.114 Test[1501:207] unionSet后遍历set3: Pear
2012-08-21 12:14:27.114 Test[1501:207] unionSet后遍历set3: Banana
2012-08-21 12:14:27.115 Test[1501:207] addObjectsFromArray后遍历set6: Jane
2012-08-21 12:14:27.117 Test[1501:207] addObjectsFromArray后遍历set6: Sam
2012-08-21 12:14:27.117 Test[1501:207] addObjectsFromArray后遍历set6: Tom
2012-08-21 12:14:27.118 Test[1501:207] addObjectsFromArray后遍历set6: Alice
2012-08-21 12:14:27.120 Test[1501:207] addObjectsFromArray后遍历set6: Bob
2012-08-21 12:14:27.121 Test[1501:207] addObjectsFromArray后遍历set6: Ben
2012-08-21 12:14:27.122 Test[1501:207] addObjectsFromArray后遍历set6: Peter
2012-08-21 12:14:27.123 Test[1501:207] addObjectsFromArray后遍历set6: Mike
2012-08-21 12:14:27.133 Test[1501:207] 过滤后遍历set7: Three
2012-08-21 12:14:27.135 Test[1501:207] 过滤后遍历set7: Two
2012-08-21 12:14:27.135 Test[1501:207] 删除Melon后遍历set1: Orange
2012-08-21 12:14:27.136 Test[1501:207] 删除grape后遍历set1: Orange
2012-08-21 12:14:27.137 Test[1501:207] 删除所有元素后set1的数量: 0
2012-08-21 12:14:27.138 Test[1501:207] 遍历NSEnumerator1: Orange
2012-08-21 12:14:27.139 Test[1501:207] 遍历NSEnumerator1: Apple
2012-08-21 12:14:27.140 Test[1501:207] 遍历NSEnumerator1: Pear
2012-08-21 12:14:27.141 Test[1501:207] 遍历NSEnumerator1: Banana
2012-08-21 12:14:27.142 Test[1501:207] 遍历NSEnumerator1: Melon
2012-08-21 12:14:27.143 Test[1501:207] 遍历NSEnumerator2: Melon
2012-08-21 12:14:27.144 Test[1501:207] 遍历NSEnumerator2: Banana
2012-08-21 12:14:27.146 Test[1501:207] 遍历NSEnumerator2: Pear
2012-08-21 12:14:27.150 Test[1501:207] 遍历NSEnumerator2: Apple
2012-08-21 12:14:27.151 Test[1501:207] 遍历NSEnumerator2: Orange
2012-08-21 12:14:27.153 Test[1501:207] NSEnumerator3 allObjects: Banana
2012-08-21 12:14:27.154 Test[1501:207] NSEnumerator3 allObjects: Melon
2012-08-21 12:14:27.155 Test[1501:207] 词典的数量: 3
2012-08-21 12:14:27.156 Test[1501:207] 遍历KEY的值: age
2012-08-21 12:14:27.158 Test[1501:207] 遍历KEY的值: name
2012-08-21 12:14:27.159 Test[1501:207] 遍历KEY的值: sex
2012-08-21 12:14:27.160 Test[1501:207] 遍历Value的值: 20
2012-08-21 12:14:27.161 Test[1501:207] 遍历Value的值: Tom
2012-08-21 12:14:27.161 Test[1501:207] 遍历Value的值: Male
2012-08-21 12:14:27.163 Test[1501:207] 通过KEY找到的value是: 20
2012-08-21 12:14:27.164 Test[1501:207] 修改前value: Male
2012-08-21 12:14:27.164 Test[1501:207] 修改后value: Female
2012-08-21 12:14:27.165 Test[1501:207] name is Tom
2012-08-21 12:14:27.166 Test[1501:207] age is 20
2012-08-21 12:14:27.168 Test[1501:207] sex is Female
2012-08-21 12:14:27.169 Test[1501:207] 删除前数量:2
2012-08-21 12:14:27.170 Test[1501:207] 删除后数量:0





最后我把完整代码也上传上来了:

http://download.youkuaiyun.com/detail/htttw/4515104








完成!


QGIS安装与使用教程 阅读详情

相关推荐

ESP32 Arduino 学习篇(五)TFT_eSPI库

该库有User_Setup.h和 User_Setup_Select.h两个配置文件,支持 ①自定义参数或 ②使用已有配置 驱动TFT屏幕。优点是: 1. 占用空间非常小 2. 动画清晰,充分利用每个像素点 3. 可以非常灵动. 4. 方便进行微调。首先在Libraries里面搜索安装TFT_eSPI库到你的工程文件里面。初始化屏幕, 如果是ST7735,可以往里面传一个参数, 具体用到时再看。缺点是: 1. 容易闪屏 2. 一般不会太复杂 3.需要大量的计算。特别注意: 字库7是仿7段数码屏的样式。

DOF526570的博客 2万+

集合NSSet、字典NSDictionary的底层实现原理

Foundation框架下提供了很多高级数据结构,很多都是和Core Foundation下的相对应,例如NSSet就是和_CFSet相对应,NSDictionary就是和_CFDictionary相对应。了解集合NSSet和字典NSDictionary的底层实现原理前,如果不了解Hash表数据结构的话,建议先去了解一下。

weixin_61196797的博客 1717

MTK平台TP驱动设备树与GPIO配置实战解析

本文详细解析了MTK平台TP驱动开发中的设备树与GPIO配置实战。通过DCT工具配置GPIO引脚,结合设备树节点定义触摸参数,并分享驱动移植、编译调试技巧及常见问题解决方案,帮助开发者快速掌握MTK触摸驱动开发核心。

ice55的博客 233

NSSet理解 和简单应用

NSSet:集合是NSObject的子类,跟NSArray的不一样在于,NSArray中的元素是有序的,可以通过索引访问,而NSSet中的元素是无序的,不能通过索引访问;NSArray中的元素可以是重复的,而NSSet中的元素不能重复,同一个元素只能有一个。 NSMutableSet:可变几何是NSSet中的子类,跟NSSet中不一样的地方在于NSMutableSet的元素是可以修改的,可以增加删除替换等操作。 NSOderedSet:有序集合是NSObject中的子类,跟NSSet中不一样的地方在于,它的

ACERROR 319

谷歌账号国家或地区设置修改全攻略:条件、流程与避坑指南

谷歌账号的国家或地区设置与付款资料、账号历史行为及登录环境强绑定,修改时需满足特定条件。其原理在于地区作为索引键,关联内容库、货币结算和风控策略。正确切换可解决内容推荐错乱、付款失败等问题,适用于搬家、订阅区域限定服务等场景。操作前需在目标地区创建付款资料、清空余额并取消订阅,且一年仅能修改一次。本文详解从准备到验证的完整流程,并揭示官方文档未提及的实操陷阱,助你安全完成地区切换。

weixin_42521558的博客 2263

使用vcpkg快速安装opencascade并自动配置部署开发环境

广泛的开源库:vcpkg 提供了上千个流行的 C++ 开源库,用户可以通过简单的命令安装和集成这些库,包括 Boost、OpenCV、SQLite、fmt 等。确保包版本一致性:通过 vcpkg.json 文件,开发者可以指定依赖的库版本,确保项目在不同环境下的构建结果一致,避免由于依赖库版本不一致而导致的构建问题。强大的社区支持:Vcpkg 是开源项目,拥有活跃的社区和微软团队的支持,提供了稳定的更新和问题修复。快速更新:Vcpkg 社区活跃,库的更新速度较快,开发者可以迅速获得库的最新版本。

loujiand的博客 2293

NSSet使用

NSSet是Object-c中使用的最少的集合类,它就如同在一个池子里放进所需要的元素。 它是无序的集合类,并且所存储的所有对象只能有唯一一个,不能重复。 它与NSArray的区别在于,它是无序的,它根据HASH算法查找特定元素,效率比遍历高。 所以使用set就是在于管理一堆无序的对象。 设计一个set类的主要目的就是来检测一个对象是否在集合里存在。 nsset的常用

Jacky Shin的专栏 1609

[DevExpress]GridControl拖拽行记录排序

DevExpress的GridControl拖拽行记录排序需求效果代码 需求 现在用户对按钮点击排序不满意了, 希望拖拽排序。 重载GridControl控件,对MouseMove、MouseDown、MouseUp事件修改一下。 效果 代码 using System; using System.Drawing; using System.Windows.Forms; using xiaoid.forms; using System.Data; using System.Collections.Gener

德仔 1561

NSSet详解

原址:http://blog.youkuaiyun.com/xys289187120/article/details/6826895 集合对象的关键字是NSSet与NSMutableSet。前者是不可变集合,后者是可变集合,Objective-C语言中大部分数据结构都存在可变与不可变两种数据。这里的集合很像Java语言与C语言中的Set,用法基本一样。但是在Objective-C语言中同一个集合

 ideaOS^(BOOL coding) 5366

如何借助Gemini 3 Pro完成一篇文献精读?(劝收藏)

金句必须是原文的完整句子,并附上该句子在文中的大致位置。你是一名资深科研文献评估专家,请根据我提供的文献信息(标题、作者、期刊、时间、引用、摘要、结论、图表)依次输出:①影响力评估:按期刊、作者、时间、引用、问题重要性给出1–10分及简述;用上述方法再结合Gemini 3 Pro的辅助,原本需要3小时才能读完一篇文献,现在只需50分钟,不管是顶刊论文还是领域内冷门论文,都可以用这套方法,另外七哥设计的高阶精读提示词,需根据自己的文献内容做调整,希望这篇文章的方法能帮你高效精读文献,掌握文献的精华内容。

智能AI让学术科研更容易 1301

Java与OSG的梦幻联动:深入编译OpenSceneGraph的Java JNI桥梁,开启3D视觉盛宴的奇幻之旅

🔥关注墨瑾轩,带你探索编程的奥秘!🚀🔥超萌技术攻略,轻松晋级编程高手🚀🔥技术宝库已备好,就等你来挖掘🚀🔥订阅墨瑾轩,智趣学习不孤单🚀🔥即刻启航,编程之旅更有趣🚀在编译OpenSceneGraph (OSG) 的Java版本时,首先需要了解OSG本身是一个主要用于3D图形和视觉仿真的开源库,它主要支持C++。然而,OSG 也支持通过JNI(Java Native Interface)与Java集成,这允许Java程序调用OSG的C++库。

java专栏 869

NSEnumerator

枚举 (NSEnumerator) 遍历数组每个索引处的对象,你可以编写一个0到[array count]的循环,而NSEnumerator用来描述这种集合迭代运算的方式。 通过objectEnumerator向数组请求枚举器,如果想从后向前浏览集合,可使用reverseObjectEnumerator方法。在获得枚举器后,可以开始一个while循环,每次循环都向这个枚举器请求它的下

火海夕 906

企业合规审查系统开发实战:基于知识图谱与深度学习的智能引擎构建(附完整Python代码)

动态合规监测:实时追踪法规变化并更新知识库智能合约审计:区块链智能合约的自动合规检查跨域知识融合:整合财务、法律、业务多维度数据可解释性增强:基于Attention机制生成合规审查依据。

理论都是虚的,代码才是王道。 456

iOS中的遍历(数组NSArray,字典NSDictionary,集合NSSet)

遍历是我们在代码中经常用到的。下面我总结了在collection中经常用到的四种遍历方式 假设数组为:NSArray *array = @[@"恭", @"喜", @"发", @"财"];NSDictionary *dictionary = @{@"新":@"年", @"大":@"吉"};NSSet *set = [NSSet setWithObjects:@"身", @"体", @"健", @

gbb123456的博客 1万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

关于NSEnumerator

关于NSEnumerator

huangyongf的博客 436

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

java enumerator_NSEnumerator使用

集合类(如:NSArray、NSSet、NSDictionary等)均可获取到NSEnumerator, 该类是一个抽象类,没有用来创建实例的公有接口。NSEnumerator的nextObject方法可以遍历每个集合元素,结束返回nil,通过与while结合使用可遍历集合中所有项。例子中使用了与前例相同的Photo对象,具体定义参考隐式循环这一节。#import #import "Photo...

weixin_28920823的博客 135

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

遍历NSArray, NSDictionary, NSSet的方法总结

1,for循环读取 1 NSArray: 2 NSArray *array = /*…*/ 3 for(int i=0; i<array.count; i++) 4 { 5 id object = array[i]; 6 // do sth 7 } 8 9 NSDictionary: 10 NSDictionary *dic ...

weixin_30677617的博客 128

遍历技巧 NSEnumerator 和快速遍历

NSEnumerator 有数种Cocoa类-包括各种群体类型在内-可以向您提供枚举器,通过枚举器,我们可以逐个取得实例持有的元素。例如: NSSet *aSet = // get a set; NSEnumerator *enumerator = [aSet objectEnumerator]; id element;   while ((element = [enu

hufeng825的专栏 6229

NSEnumerator简介

NSEnumerator是一个抽象基类,其中定义了2个方法,使其子类实现: - (nullable ObjectType)nextObject; @property (readonly, copy) NSArray*allObjects; 其中nextObject是关键方法,它返回枚举里的下一个对象。每次调用改方法其,其内部结构都会更新,使得下一次调用方法时能返回下一个对象。等到

defeny的专栏 1124

Objective-C 之 NSSet / NSArray / NSDictionary /N...

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34202952的博客 82

NSEnumerator用法及找到添加到view中最上层的subview

枚举(NSEnumerator)集合类(如:NSArray、NSSet、NSDictionary等)均可获取到NSEnumerator, 该类是一个抽象类,没有用来创建实例的公有接口,通过objectEnumerator向请求枚举器,如果想从后向前浏览集合,可使用reverseObjectEnumerator方法。NSEnumerator的nextObject方法可以遍历每个集合元素,结束返回nil

tzshlyt的专栏 981

NSArray NSSet NSDictionary 元素取出方法

NSArray *array = @[@"123",@"12333333",@"楼主傻逼",@"LZSB",@"顶",@"楼上都是傻逼",@"土豪我们做朋友吧",@"回复LS 滚"]; //for循环 for(int i=0;i<[array count];i++) NSLog(@"%@",[array objectAtIndex:i]); //for in 快速枚举

waige2005的专栏 1212

块枚举,for循环

for循环NSArray *anArray = /*...*/; for (int i = 0; i < anArray.count; i++) { id object = anArray[i]; //Do something with 'object' }字典或者set//Dictionary NSDictionary *aDicti

helloMr_wo的博客 1519

NSEnumerator使用

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34399060的博客 78

串口通信实战指南:从基础概念到STM32与Linux高级应用

串口通信作为一种基础的异步串行通信技术,通过单根数据线逐位传输数据,其核心原理涉及波特率、数据位、停止位和校验位等关键参数的配置。在嵌入式开发和硬件调试领域,串口通信具有接线简单、成本低、传输距离远的技术价值,广泛应用于STM32微控制器、传感器数据采集和工业控制等场景。UART协议作为最常用的串口通信实现方式,负责完成并行数据与串行数据流之间的转换。通过合理的通信协议设计和DMA传输优化,可以显著提升数据传输的可靠性和效率。本文以STM32和Linux环境下的串口编程为例,深入解析硬件连接、驱动配置、调试

weixin_33857230的博客 392
上一篇: iPhone之手势切换图片
下一篇: iPhone开发之UIScrollView初步
htttw
博客等级 码龄18年 378粉丝 73原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值