2014-10-08 11 views
0

我想在矢量字計數,例如,如何使用scala在矢量中找到字數?

我的載體是:

Vector(pen, pencil, pen pencil) 
Vector(pencil, book, eraser, pencil book, pencil eraser, book eraser, pencil book eraser) 
Vector(pen, pencil, book, pen pencil, pen book, pencil book, pen pencil book) 

我想計數爲,

(pen,2) 
(pencil,3) 
(pen pencil,2) 
(book,2) 
(eraser,1) 
(pencil book,2) 
(pencil eraser,1) 
(book eraser,1) 
(pencil book eraser,1) 
(pen book,1) 
(pen pencil book,1) 

回答

3

這裏有一個快速的解決方案(可能不最高效的,如果這是一個問題):

val v1 = Vector("pen", "pencil", "pen pencil") 
val v2 = Vector("pencil", "book", "eraser", "pencil book", "pencil eraser", "book eraser", "pencil book eraser") 
val v3 = Vector("pen", "pencil", "book", "pen pencil", "pen book", "pencil book", "pen pencil book") 

(v1 ++ v2 ++ v3).groupBy(v => v).mapValues(_.size) 

res1: scala.collection.immutable.Map[String,Int] = Map(pencil book eraser -> 1, pencil eraser -> 1, eraser -> 1, book eraser -> 1, pen pencil -> 2, book -> 2, pen pencil book -> 1, pencil -> 3, pen -> 2, pen book -> 1, pencil book -> 2) 
+0

注意'groupBy(v => v)'相當於'grou pBy(身份)'。 – elm 2014-10-08 05:24:04

+0

@Shadowlands它可以工作......但是我在完成一些過程之後得到了這些載體。所以我們不能動態地將它存儲在變量.ie,val v1,val v2 ...等等...所以可以做? – rosy 2014-10-08 06:30:14

+2

@rosy,你的意思是你有一個向量列表? '.flatten'將把這個列表變成一個單詞列表,你可以在那裏調用groupBy。 – 2014-10-08 06:46:46