第2關(guān):Set 集合的使用
- 任務(wù)要求
- 參考答案
- 評(píng)論3
- 任務(wù)描述
-
相關(guān)知識(shí)
- Set 集合簡(jiǎn)介
- 定義 Set 集合
-
Set集合的常用操作
- 三個(gè)最基本的操作
- 連接集合
- 交集
- 常用方法表
- 編程要求
- 測(cè)試說(shuō)明
任務(wù)描述
本關(guān)任務(wù):求出兩個(gè)集合的交集。
相關(guān)知識(shí)
常見(jiàn)的集合類(lèi)有 List 列表、Set 集合、Map 映射和元組等。接下來(lái)我們將為大家介紹第二種集合---Set 集合。
Set 集合簡(jiǎn)介
Set 是最簡(jiǎn)單的一種集合。集合中的對(duì)象不按特定的方式排序,并且沒(méi)有重復(fù)對(duì)象。
定義 Set 集合
以下代碼演示了如何定義 Set 集合。
object ForDemo {
def main(args: Array[String]): Unit = {
// 定義一個(gè)空集合
var set: Set[Nothing] =Set()
// 定義一個(gè)存儲(chǔ)字符串的集合
var set1: Set[String] =Set("edu","coder")
// 定義一個(gè)存儲(chǔ)整數(shù)的集合
var set2: Set[Int] =Set(1,2,3)
println(set)
println(set1)
println(set2)
}
}
執(zhí)行結(jié)果:
Set()
Set(edu, coder)
Set(1, 2, 3)
從以上代碼中可以看出,使用 Set(元素1,元素2,...) 即可定義一個(gè) Set 集合。
Set集合的常用操作
三個(gè)最基本的操作
Scala Set 有三個(gè)基本操作:
方法名 | 說(shuō)明 |
---|---|
head | 返回列表第一個(gè)元素 |
tail | 返回一個(gè)列表,包含除了第一元素之外的其他元素 |
isEmpty | 在列表為空時(shí)返回 true |
這些基本的操作可應(yīng)用于任何 Scala 列表。實(shí)例如下:
object ForDemo {
def main(args: Array[String]): Unit = {
// 定義 Set 集合
val site = Set("educoder", "百度", "騰訊")
println( "第一網(wǎng)站是 : " + site.head )
println( "最后一個(gè)網(wǎng)站是 : " + site.tail )
println( "查看列表 site 是否為空 : " + site.isEmpty )
}
}
執(zhí)行結(jié)果:
第一網(wǎng)站是 : educoder
除了第一家網(wǎng)站之外的網(wǎng)站的是 : Set(百度, 騰訊)
查看列表 site 是否為空 : false
連接集合
Scala 提供了兩種方法來(lái)連接兩個(gè)或者兩個(gè)以上的 Set 集合,這兩種方法分別是 ++ 運(yùn)算符 .++() 方法。
object ForDemo {
def main(args: Array[String]): Unit = {
val site1 = Set("educoder", "騰訊", "百度")
val site2 = Set("華為","educoder","淘寶")
// 使用運(yùn)算符 ++
var site = site1 ++ site2
println( "site1 ++ site2 : " + site )
// 使用 .++ 方法
site = site1.++(site2)
println( "site1.++(site2) : " + site )
}
}
執(zhí)行結(jié)果:
site1 ++ site2 : Set(騰訊, 淘寶, 百度, 華為, educoder)
site1.++(site2) : Set(騰訊, 淘寶, 百度, 華為, educoder)
需要注意的是:1.兩個(gè)集合合并之后,會(huì)把重復(fù)的元素去除;2.只有當(dāng)兩個(gè)集合的元素類(lèi)型相同時(shí),才可以做連接。
交集
使用 & 方法或 intersect 方法可以查看兩個(gè)集合的交集元素。
object Test {
def main(args: Array[String]) {
val num1 = Set(5,6,90,28,30,45)
val num2 = Set(5,60,90,20,35,55)
// 打印交集
println( "num1.&(num2) : " + num1.&(num2) )
println( "num1.intersect(num2) : " + num1.intersect(num2) )
}
}
執(zhí)行結(jié)果:
num1.&(num2) : Set(5, 90)
num1.intersect(num2) : Set(5, 90)
常用方法表
下表列出了 Set 集合的常用方法:
方法 | 描述 |
---|---|
def +(elem: A): Set[A] | 為集合添加新元素,并創(chuàng)建一個(gè)新的集合,除非元素已存在 |
def -(elem: A): Set[A] | 移除集合中的元素,并創(chuàng)建一個(gè)新的集合 |
def contains(elem: A): Boolean | 如果元素在集合中存在,返回 true,否則返回 false |
def &(that: Set[A]): Set[A] | 返回兩個(gè)集合的交集 |
def &~(that: Set[A]): Set[A] | 返回兩個(gè)集合的差集 |
def +(elem1: A, elem2: A, elems: A*): Set[A] | 通過(guò)添加傳入指定集合的元素創(chuàng)建一個(gè)新的不可變集合 |
def ++(elems: A): Set[A] | 合并兩個(gè)集合 |
def -(elem1: A, elem2: A, elems: A*): Set[A] | 通過(guò)移除傳入指定集合的元素創(chuàng)建一個(gè)新的不可變集合 |
def apply(elem: A) | 檢測(cè)集合中是否包含指定元素 |
def count(p: (A) => Boolean): Int | 計(jì)算滿(mǎn)足指定條件的集合元素個(gè)數(shù) |
def copyToArray(xs: Array[A], start: Int, len: Int): Unit | 復(fù)制不可變集合元素到數(shù)組 |
def diff(that: Set[A]): Set[A] | 比較兩個(gè)集合的差集 |
def drop(n: Int): Set[A]] | 返回丟棄前n個(gè)元素新集合 |
def equals(that: Any): Booleanequals | 方法可用于任意序列。用于比較系列是否相等 |
def exists(p: (A) => Boolean): Boolean | 判斷不可變集合中指定條件的元素是否存在 |
def filter(p: (A) => Boolean): Set[A] | 輸出符合指定條件的所有不可變集合元素 |
def find(p: (A) => Boolean): Option[A] | 查找不可變集合中滿(mǎn)足指定條件的第一個(gè)元素 |
def foreach(f: (A) => Unit): Unit | 將函數(shù)應(yīng)用到不可變集合的所有元素 |
def head: A | 獲取不可變集合的第一個(gè)元素 |
def init: Set[A] | 返回所有元素,除了最后一個(gè) |
def intersect(that: Set[A]): Set[A] | 計(jì)算兩個(gè)集合的交集 |
def isEmpty: Boolean | 判斷集合是否為空 |
def last: A | 返回最后一個(gè)元素 |
def max: A | 查找最大元素 |
def min: A | 查找最小元素 |
def size: Int | 返回不可變集合元素的數(shù)量 |
def sum: A | 返回不可變集合中所有數(shù)字元素之和 |
def tail: Set[A] | 返回一個(gè)不可變集合中除了第一元素之外的其他元素 |
def take(n: Int): Set[A] | 返回前 n 個(gè)元素 |
def toList: List[A] | 返回 List,包含了不可變集合的所有元素 |
def toMap[T, U]: Map[T, U] | 返回 Map,包含了不可變集合的所有元素 |
def toSeq: Seq[A] | 返回 Seq,包含了不可變集合的所有元素 |
def toString(): String | 返回一個(gè)字符串,以對(duì)象來(lái)表示 |
編程要求
仔細(xì)閱讀右側(cè)編輯區(qū)內(nèi)給出的代碼框架及注釋?zhuān)?Begin-End 間編寫(xiě)程序代碼,求兩個(gè)集合的交集,具體要求如下:
- 接收給定的多行數(shù)據(jù)(例:4 \n 56 \n 5 \n -10 \n 10,其中第一個(gè)數(shù)代表集合長(zhǎng)度,其余數(shù)代表具體值,\n 僅用來(lái)說(shuō)明前一個(gè)數(shù)與另一個(gè)數(shù)之間是換行,實(shí)際數(shù)據(jù)中并沒(méi)有);
- 將接收到的數(shù)據(jù)添加進(jìn)集合,并輸出該集合與給定集合 set 的交集。
測(cè)試說(shuō)明
平臺(tái)將使用測(cè)試集運(yùn)行你編寫(xiě)的程序代碼,若全部的運(yùn)行結(jié)果正確,則通關(guān)。
例:
測(cè)試輸入:
4
3
4
6
2
預(yù)期輸出:
List(2, 4, 5, 3, 6)
開(kāi)始你的任務(wù)吧,祝你成功!文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-428770.html
太想吐槽了,案例那里根本想不到答案是怎么來(lái)的,得去試錯(cuò)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-428770.html
/********** Begin **********/
var n=StdIn.readInt()
var s:Set[Int]=Set()
for(i <- 1 to n){
var x= StdIn.readInt
s+=x
}
println( "兩個(gè)集合的交集是:" + set.&(s) )
/********** End **********/
到了這里,關(guān)于Scala中集合的使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!