习惯使用OC的小伙伴会发现swift的数组没有removeObject方法!
_dataArray = @[@"张三",@"张三",@"李四"].mutableCopy;
[_dataArray removeObject:@"张三"];
swift数组只有一个
var dataSource = ["张生","李浩","王鹏","赵雷"]
dataSource.remove(at: i)
如果我要实现类似OC数组的removeObject方法咋办呢?
网上有人解答的思路是这样的:首先,找到数组中该元素所在的位置,然后使用remove(at: i)方法移除。
例如:
for item in self.userList {
var i = 0
for userItem in self.sendModel.arrayOfUserList {
if item.userID == userItem.userID {
self.sendModel.arrayOfUserList.remove(at: i)
break
}
i += 1
}
}
这种方式固然可行,但swift显然不希望我们这样做!
我们知道,swift有一个新的类型集合Set,如果我们用集合Set代替数组,就变得简单了太多了!
var selectData : Set<Int> = [1,2,4,6]
//移除某个元素
selectData.remove(indexPath.row)
//插入某个元素
selectData.insert(indexPath.row)
//是否包含某个元素
selectData.contains(indexPath.row)
集合可以看做是一种特殊的数组,为啥这样说呢?请仔细看两者的初始化!例子中两者的初值都是一个数组[,,,],但对于集合而言,我给它指定了一个类型叫集合!
那么集合相对数组,特殊在哪里呢?
1、集合是无序的,所以你不能像数组一样,通过索引找到集合中某个元素
2、集合中的元素是不重复的,数组可以有多个重复的值,对集合而言,不会有重复的元素。
显然,对于我们需要筛选的业务场景而言,集合显得更加适用!我们不需要考虑重复,只需要contains、remove、insert三种操作就可以简单实现我们的需求。
小结:不要纠结swift为何没有removeObject方法,适用Set代替数组。
注意:集合Set只能用于筛选数据哦,显示的话,还是需要用数组,因为集合Set没有索引值。
网友评论