scala從集合中提取不重複的元素
Problem
你有一個集合,內部有很多重複元素,你想要把這些重複的元素只保留一份。
Solution
使用Distinct方法:
scala> val x = Vector(1, 1, 2, 3, 3, 4)
x: scala.collection.immutable.Vector[Int] = Vector(1, 1, 2, 3, 3, 4)
scala> val y = x.distinct
y: scala.collection.immutable.Vector[Int] = Vector(1, 2, 3, 4)
這個distinct方法返回一個新的集合,重複元素只保留一份。記得使用一個新的變數來指向這個新的集合,無論你使用的是mutable集合還是immutable集合。
如果你突然需要一個set,那麼直接吧你的集合轉化成為一個set也是去掉重複元素的方式:
scala> val s = x.toSet
s: scala.collection.immutable.Set[Int] = Set(1, 2, 3, 4)
因為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 hashCode: Int = {
val prime = 31
var result = 1
result = prime * result + lastName.hashCode
result = prime * result + (if(firstName == null) 0 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 hashCode: Int = {
| val prime = 31
| var result = 1
| result = prime * result + lastName.hashCode
| result = prime * result + (if(firstName == null) 0 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)
list: List[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
黑馬基礎階段測試題:創建一個存儲字符串的集合list,向list中添加以下字符串:”C++”、”Java”、” Python”、”大數據與雲計算”。遍歷集合,將長度小於5的字符串從集合中刪除,刪除成功後,打印集合中的所有元素
cti ati pac 完成 body ava 字符 c++ rgs package com.swift; import java.util.ArrayList; import java.util.List; import java.util.ListIterator
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的檢測演算法有顯著地提升 ,並且沒有帶來過多的額外計算量 來源:曉飛的
用PDFMiner從PDF中提取文本文字
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.264從SPS中提取視頻寬高
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元