Scala 集合:Set API

栏目: Scala · 发布时间: 5年前

内容简介:Set 用于表示一个不包含重复元素的集合,不强调元素的顺序性。Set 同样被定义为是一个特质类型,区分可变与不可变,定义如下:函数示例:

Set 用于表示一个不包含重复元素的集合,不强调元素的顺序性。Set 同样被定义为是一个特质类型,区分可变与不可变,定义如下:

trait Set[A] extends (A => Boolean)
                with Iterable[A]
                with GenSet[A]
                with GenericSetTemplate[A, Set]
                with SetLike[A, Set[A]]

一. 插入操作

1.1 +

函数 + 用于往 Set 对象中添加一个或多个元素,其定义如下:

def + (elem: A): This
def + (elem1: A, elem2: A, elems: A*): This = this + elem1 + elem2 ++ elems

示例:

val set = Set(1, 2, 3)
set + 4 // 输出:Set(1, 2, 3, 4)
set + (4, 5) // 输出:Set(5, 1, 2, 3, 4)

1.2 ++ & ++:

函数 ++ 接收一个 GenTraversableOnce 类型的参数,只要是继承自 GenTraversableOnce 的集合都可以作为参数,函数会将参数中所包含的元素添加到原 Set 对象中,并创建一个新的 Set 对象返回。示例:

val set = Set(1, 2, 3)
set ++ Seq(4, 5) // 输出:Set(5, 1, 2, 3, 4)
set ++: Seq(4, 5) // 输出:List(1, 2, 3, 4, 5)

函数 ++: 相对于 ++ 的区别在于右结合,所以上面的示例对应的结果类型是 List。

1.3 += & ++= & add

对于可变集合而言,可以实现原地插入,函数 += 对标 + ,而 ++= 则对标 ++ ,示例:

val mset = mutable.Set(1, 2, 3)
mset += 4
mset += (5, 6)
mset // 输出:Set(1, 5, 2, 6, 3, 4)
mset ++= Set(7, 8)
mset // 输出:Set(1, 5, 2, 6, 3, 7, 4, 8)

函数 add 同样适用于可变 Set 对象,用于往 Set 对象中添加单个元素,如果 Set 中已经包含该元素则返回 false,否则返回 true。示例:

val mset = mutable.Set(1, 2, 3)
mset.add(3) // 输出:false
mset.add(4) // 输出:true

二. 更新操作

2.1 update

对于可变集合来说,函数 update 用于更新集合中的元素(定义如下),其中参数 elem 对应需要更新的元素值,而参数 included 则用于指定是添加( included = true )还是删除( included = false )。

def update(elem: A, included: Boolean)

示例:

val set = mutable.Set(1, 2, 3)
set.update(0, included = true)
set // 输出:Set(0, 1, 2, 3)
set.update(0, included = false)
set // 输出:Set(1, 2, 3)

其中 set.update(0, included = true) 可以简写为 set(0) = trueset.update(0, included = false) 可以简写为 set(0) = false

三. 删除操作

3.1 - & --

函数 - 用于从 Set 对象中移除一个或多个元素,而函数 -- 则接收一个 GenTraversableOnce 类型参数,只要是继承自 GenTraversableOnce 的集合都可以作为参数,函数会从原 Set 对象中移除参数集合中所包含的元素。示例:

val set = Set(1 to 9: _*)
set - 1 // 输出:Set(5, 6, 9, 2, 7, 3, 8, 4)
set - (9, 8) // 输出:Set(5, 1, 6, 2, 7, 3, 4)
set -- Seq(7, 6) // 输出:Set(5, 1, 9, 2, 3, 8, 4)

3.2 -= & --=

对于可变集合而言,可以实现原地删除,函数 -= 对标 - ,而 --= 则对标 -- ,示例:

val mset = mutable.Set(1 to 9: _*)
mset -= 1
mset -= (9, 8)
mset // 输出:Set(5, 2, 6, 3, 7, 4)
mset --= Seq(7, 6)
mset // 输出:Set(5, 2, 3, 4)

3.3 remove & retain & clear

函数 remove 用于从 Set 中移除单个元素,如果对应的元素存在则返回 true,否则返回 false;函数 retain 接收一个谓词 A => Boolean ,用于移除所有不满足条件的元素;函数 clear 则用于清空所有元素。示例:

val mset = mutable.Set(1 to 9: _*)
mset.remove(1) // 输出:true
mset.remove(1) // 输出:false
mset.retain(_ % 2 == 0)
mset // 输出:Set(2, 6, 4, 8)
mset.clear()
mset // 输出:Set()

四. 包含检查

4.1 contains & apply

函数 contains 用于检查 Set 对象中是否包含指定的元素,这是一个从父特质继承而来的方法,对于 Set 来说,可以使用 apply 函数检查是否包含指定元素,同样,函数 apply 可以使用 () 简写。示例:

val set = Set(1, 2, 3)
set.contains(2) // 输出:true
set.apply(5) // 输出:false
set(5) // 输出:false

4.2 subsetOf

函数 subsetOf 用于检查当前 Set 对象是否是参数给定的 Set 的子集,示例:

val set = Set(1, 2, 3)
set.subsetOf(Set(1, 2, 3, 4)) // 输出:true
set.subsetOf(Set(1, 2)) // 输出:false

五. 集合操作

5.1 intersect & &

函数 intersect 用于对于两个 Set 对象求 交集 ,也可以简写为 & ,示例:

val set1 = Set(1, 2, 3)
val set2 = Set(3, 4, 5)
set1.intersect(set2) // 输出:Set(3)
set1 & set2 // 输出:Set(3)

5.2 union & |

函数 union 用于对于两个 Set 对象求 并集 ,也可以简写为 | ,示例:

val set1 = Set(1, 2, 3)
val set2 = Set(3, 4, 5)
set1.union(set2) // 输出:Set(5, 1, 2, 3, 4)
set1 | set2 // 输出:Set(5, 1, 2, 3, 4)

5.3 diff & &~

函数 diff 用于对两个 Set 对象求 差集 ,也可以简写为 &~ ,示例:

val set1 = Set(1, 2, 3)
val set2 = Set(3, 4, 5)
set1.diff(set2) // 输出:Set(1, 2)
set1 &~ set2 // 输出:Set(1, 2)

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

勇敢新世界‧互聯網罪與罰

勇敢新世界‧互聯網罪與罰

許煜、劉細良 / CUP / 2005 / $48

我天天上網數小時,為的是要在節目裡面介紹世界的最新動態,尤其是網絡這個世界本身日新月異的變化。所以我不可能不注意到BT、共享軟件、 Wikipedia、網絡監管等各種影響政治、社會、經濟及文化的重要網絡現象。但是我發現市面上一直沒有一本內容充實全面,資料切時的中文參考書,直到這本《互聯網罪與罰》。而且,最大的驚喜是它易讀好看,簡直就像故事書。 梁文道 鳳凰衛視 《網羅天下......一起来看看 《勇敢新世界‧互聯網罪與罰》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

URL 编码/解码
URL 编码/解码

URL 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具