52-HashSet
HashSet 类型来构造只拥有不重复元素的 Collection。Collection具有遍历元素、添加元素、删除元素,但是没有修改单个元素功能。
HashSet 初始化
使用HashSet之前需要先导入包
import std.collection.*
然后可以进行初始化了
let a = HashSet<String>() // Created an empty HashSet whose element type is String
let b = HashSet<String>(100) // Created a HashSet whose capacity is 100
let c = HashSet<Int64>([0, 1, 2]) // Created a HashSet whose element type is Int64, containing elements 0, 1, 2
let d = HashSet<Int64>(c) // Use another Collection to initialize a HashSet
let e = HashSet<Int64>(10, {x: Int64 => (x * x)}) // Created a HashSet whose element type is Int64 and size is 10. All elements are initialized by specified rule function
需要注意的是,如果往 HashSet中存入了重复的元素,那么HashSet会自动过滤,如。
let c = HashSet<Int64>([0, 1, 2, 2, 2, 2, 2, 2])
println(c) // [0,1,2]
HashSet 访问
可以通过forin遍历HashSet访问每一个元素,同时它也存在size熟悉,用来获取整个HashSet的长度。
但是需要注意的是,使用forin访问HashSet每一个元素时,它不保证顺序,另外也不能通过下标直接访问HashSet元素。
-
下标访问,错误的示例。
let c = HashSet<Int64>([0, 1, 2]) println(c[2]) // 下标访问出错
-
forin遍历 每一个元素
let c = HashSet<Int64>([0, 1, 2]) for (val in c) { println(val) }
-
size获取HashSet长度
let c = HashSet<Int64>([0, 1, 2]) println(c.size)
HashSet 增加
果需要将单个元素添加到 HashSet 里,请使用 put 函数。如果希望同时添加多个元素,可以使用 putAll 函数。
let mySet = HashSet<Int64>()
mySet.put(0) // mySet contains elements 0
mySet.put(0) // mySet contains elements 0
mySet.put(1) // mySet contains elements 0, 1
let li = [2, 3]
mySet.putAll(li) // mySet contains elements 0, 1, 2, 3
HashSet 删除
从 HashSet 中删除元素,可以使用 remove 函数,需要指定删除的元素。
let mySet = HashSet<Int64>([0, 1, 2, 3])
mySet.remove(1) // mySet contains elements 0, 2, 3
HashSet contains
可以使用contains方法判定某个元素是否存在于 HashSet中。
let c = HashSet<Int64>([0, 1, 2])
println(c.contains(1)) // true