1、面试题
现在有一个数组arr1,它里面存储的字符串分别为@“zhangsan”@“lisi”@“wangwu”@“lisi”@“zhangsan”,请将它去重后赋值给可变数组arr2输出为:@“zhangsna”,@“lisi”,@“wangwu”。
解题思路:
1)创建一个可变字典
2)遍历这个数组将数组的字符串存储为这个字典的key和value
3)调用字典的一下任意一个方法
@property (readonly, copy) NSArray<KeyType> *allKeys;
@property (readonly, copy) NSArray<ObjectType> *allValues;
4)将获得的字符串存储在arr2中即可。
代码如下:
1 NSArray *arr1 = @[@"zhangsan",@"lisi",@"wangwu",@"lisi",@"zhangsan"]; 2 3 NSMutableDictionary *dict = [NSMutableDictionary dictionary]; 4 for (NSString * str in arr1) { 5 [dict setObject:str forKey:str]; 6 } 7 8 NSMutableArray * arr2 = [NSMutableArray arrayWithObjects:[dict allKeys], nil]; 9 10 NSLog(@"%@",arr2);
输出结果:
2016-03-21 18:07:32.058 01- nsarray[1829:263154] ( ( zhangsan, lisi, wangwu ) )
原理:这个是根据字典的特性:key值唯一,当碰到俩个zhangsan时,他不会在创建一个键值对而是给上一个zhangsan的键值对再重新赋值
eg:
NSMutableDictionary *dict = [[NSMutableDictionary alloc]initWithObjects:@[@"zhangsan",@"lisi"] forKeys:@[@"1",@"1"]]; NSLog(@"%@",dict);
输出结果:
2016-03-21 18:09:54.571 01- nsarray[1865:265560] {
1 = lisi;
}