1. 程式人生 > >scala從集合中提取不重複的元素

scala從集合中提取不重複的元素

Problem

    你有一個集合,內部有很多重複元素,你想要把這些重複的元素只保留一份。

Solution

    使用Distinct方法:

scala> val x = Vector(112334)
x: scala.collection.immutable.Vector[Int] = Vector(112334)

scala> val y = x.distinct
y: scala.collection.immutable.Vector[Int] = Vector(1234)

    這個distinct方法返回一個新的集合,重複元素只保留一份。記得使用一個新的變數來指向這個新的集合,無論你使用的是mutable集合還是immutable集合。

    如果你突然需要一個set,那麼直接吧你的集合轉化成為一個set也是去掉重複元素的方式:

scala> val s = x.toSet
s: scala.collection.immutable.Set[Int] = Set(1234)

    因為Set對於一樣的元素只能儲存一份,所以把Array,List,Vector或者其他的集合轉化成Set可以去掉重複元素。實際上這就是distinct方法的工作遠離。Distinct方法的原始碼顯示了他就是實用了一個mutable.HashSet的例項。

Using distinct with your own classes

    要想對你自己定義的集合元素型別使用distinct方法,你需要實現equals和hashCode方法。舉個例子,下面這個類就可以使用disticnt方法,因為我們實現了這兩個方法:

class Person(firstName: String, lastName: String){
  override def toString = s"$firstName $lastName"
  def canEqual(a: Any) = a.isInstanceOf[Person]
  override def equals(that: Any): Boolean = {
    that match
 {       case that: Person => that.canEqual(this) && this.hashCode == that.hashCode       case _ => false     }   }   override def hashCodeInt = {     val prime = 31     var result = 1     result = prime * result + lastName.hashCode     result = prime * result + (if(firstName == null0 else firstName.hashCode)     return result   } } scala> class Person(firstName: String, lastName: String){      |   override def toString = s"$firstName $lastName"      |   def canEqual(a: Any) = a.isInstanceOf[Person]      |   override def equals(that: Any): Boolean = {      |     that match {      |       case that: Person => that.canEqual(this) && this.hashCode == that.hashCode      |       case _ => false      |     }      |   }      |   override def hashCodeInt = {      |     val prime = 31      |     var result = 1      |     result = prime * result + lastName.hashCode      |     result = prime * result + (if(firstName == null0 else firstName.hashCode)      |     return result      |   }      | } defined class Person object Person {   def apply(firstName: String, lastName: String) = new Person(firstName, lastName) } scala> object Person {      |   def apply(firstName: String, lastName: String) = new Person(firstName, lastName)      | } defined module Person

    接下來我們定義幾個Person物件的例項,並測試distinct方法:

scala> val dale1 = new Person("Dale""Cooper")
dale1: Person = Dale Cooper

scala> val dale2 = new Person("Dale""Cooper")
dale2: Person = Dale Cooper

scala> val ed = new Person("Ed""Hurley")
ed: Person = Ed Hurley

scala> val list = List(dale1, dale2, ed)
listList[Person] = List(Dale Cooper, Dale Cooper, Ed Hurley)

scala> val uniques = list.distinct
uniques: List[Person] = List(Dale Cooper, Ed Hurley)

相關推薦

scala集合提取重複元素

Problem     你有一個集合,內部有很多重複元素,你想要把這些重複的元素只保留一份。 Solution     使用Distinct方法: scala> val x = Vector(1, 1, 2, 3, 3, 4) x: scala.collection.

python統計列表list、dataframe以及Series重複元素及其相應個數

方法1#say為所要統計的列表 mylist = set(say) #將列表中的元素無重複的抽取出來,賦值給另一個列表 for item in mylist: print

python-進階教程-序列移除重複項並保持元素順序

0.摘要 本文主要介紹去除序列中重複的元素,並保持剩下元素順序不變的方法。   1.轉set() 如果只想去除重複元素,而不關心順序問題,可以將序列轉為set,從而達到簡單快速去重的效果。 a = [1,2,3,4,5,6,5,4,3,2,1,7,8,9] a = li

python random 集合隨機選擇元素

有序 函數 lis port slice foo random from 沒有 使用python random模塊的choice方法隨機選擇某個元素 from random import choice foo = [‘a‘, ‘b‘, ‘c‘, ‘d‘, ‘e‘] prin

Excel怎樣字串提取位置和長度固定的數字

最近上課的時候,常常有學員諮詢怎樣從Excel字元中提取位置和長度都不固定的數字,今天我們分兩種情況來聊一聊對應的解決方案。 情況1:數字前後有特定的分隔符 如果數字前後有特定的分隔符,比如()、##等分隔符,那麼我們可以通過查詢這些分隔符的位置,來定位到數字的位置。 比如下圖所示的這個

java8stream操作:集合獲取符合條件的元素

List<Student> students = new ArrayList<>(); students.add(new Student(1,"張三",

集合框架(一)續 向集合新增一個集合、陣列和List之間的相互轉換、集合刪除另一個集合所包含的元素

集合方法集結: import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.LinkedList; import java.util.List

統計陣列重複/重複元素個數

首先給出暴力方法,平方效能 public static int count(Comparable[] a) { //統計重複元素數,如果元素後面沒有和它一樣的那麼它就是不重複元素,否則不是 int count = 0; for(int i = 0;i&l

Java實現集合的組合(組合取出K個元素進行組合的所有情況)

1.利用遞迴進行取出資料: public static <T> List<List<T>> combinations(List<T> list, int k) { if (k == 0 ||

SEPC:使用3D卷積FPN提取尺度變特徵,漲點神器 | CVPR 2020

> 論文提出PConv為對特徵金字塔進行3D卷積,配合特定的iBN進行正則化,能夠有效地融合尺度間的內在關係,另外,論文提出SEPC,使用可變形卷積來適應實際特徵間對應的不規律性,保持尺度均衡。PConv和SEPC對SOTA的檢測演算法有顯著地提升 ,並且沒有帶來過多的額外計算量   來源:曉飛的

用PDFMinerPDF提取文本文字

dfp port 下載 span setup 技術分享 code with converter 1、下載並安裝PDFMiner   從https://pypi.python.org/pypi/pdfminer/下載PDFMineer wget https://pypi.p

java List隨機取出一個元素

n) pos () pan ext array bsp spa arr java 從List中隨機取出一個元素 1 List<Integer> list = new ArrayList<>(); 2 Random random =

H.264SPS提取視頻寬高

ufs ase tel .html eva depth spl evel rip H.264有兩種封裝模式: (1)annexb模式:傳統模式,使用start code來分隔NAL, SPS和PPS是在ES流的頭部; (2)mp4模式:沒有start code,使用NALU

How to extract pcd from a rosbag? 如何rosbag提取pcd

disk div files org class ont int osb rac 4.1 bag_to_pcd Reads a bag file, saving all ROS point cloud messages on a specified topic as PCD

【hive】url提取需要的部分字串

本人菜鳥一隻,如果有什麼說錯的地方還請大家批評指出!! 事情是這樣的,hive的A表中,有url這樣的一個欄位,我想要提取這個欄位中的某一部分(這不就是擷取字串嘛)。但是substring肯定是滿足不了我的需求的,自己寫hive的udf也不太現實(用最簡單的方式完成任務,才會讓後來的維護變得更加

檢視一個列表是否出現重複元素

轉載地址: http://greenteapress.com/thinkpython2/code/has_duplicates.py 《像電腦科學家一樣思考Python》 11.10練習中的練習 11-4 # 通過使用set函式來確定這個需求,就這段程式碼 return len

ffmpeg 視訊提取WAV格式的音訊

步驟 1.下載ffmpeg 2.把下載回來的ffmpeg解壓後的bin目錄路徑新增到環境變數裡面的path裡面 3. ffmpeg -i .[迅雷下載xunbo.cc]愛情公寓第二季EP20.rmvb -f wav -ar 16000 2-20.wav 引數說明 -i

按空格和按換行檔案提取資料

1,讀取檔案的類為ifstream,其中“i”代表“in”,針對變數而言,ifstream所在的標頭檔案為fstream; 2,ifstream中有open方法,可以開啟檔案; 3,ifstream中有>>方法,可以以空格為分割符,以換行為結束符讀取資料; 4,iostrea

dispatch 直接props到的原因是connect做了操作 已經和dispatch綁定了 所以會再返回dispatch了

> mapDispatchToProps如果是物件,那麼會和store繫結作為props的一部分傳入ui元件。如果是個函式,它接受兩個引數,bindActionCreators會將action和dispatch繫結並返回一個物件,這個物件會和ownProps一起作為props的一部分傳入ui元