日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Scala中使用两种方式对单词进行次数统计(wordCount)

發(fā)布時(shí)間:2024/9/27 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Scala中使用两种方式对单词进行次数统计(wordCount) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

使用Scala對單詞數(shù)量進(jìn)行統(tǒng)計(jì):
假設(shè)有單詞數(shù)組:
val arr = Array(“hello tom”,”hello jerry”,”hello hello”)
需要對Array中的每個(gè)單詞進(jìn)行統(tǒng)計(jì)計(jì)數(shù)。
可以使用如下方式:
方式一:

scala> arr.flatMap(_.split(" ")).map((_,1)).groupBy(_._1).map(t=>(t._1,t._2.size)) res1: scala.collection.immutable.Map[String,Int] = Map(tom -> 1, jerry -> 1, hello -> 4)

解釋說明:
1、 arr.flatMap(_.split(” “)) //相當(dāng)于是將Array中的數(shù)組進(jìn)行壓縮,下劃線代表的是Arrary中的每個(gè)元素,并且按照” “進(jìn)行切分,運(yùn)行后的結(jié)果如下:

scala> arr.flatMap(_.split(" ")) res0: Array[String] = Array(hello, tom, hello, jerry, hello, hello)

2、 接著對map中的每個(gè)元素進(jìn)行匯總計(jì)算

scala> arr.flatMap(_.split(" ")).map((_,1)) res2: Array[(String, Int)] = Array((hello,1), (tom,1), (hello,1), (jerry,1), (hello,1), (hello,1))

解釋說明:
這里的map((_,1))相當(dāng)于是將前面的Array變成元組的形式

3、接著把a(bǔ)rray進(jìn)行分組:
scala> arr.flatMap(.split(” “)).map((,1)).groupBy(_._1)
res3: scala.collection.immutable.Map[String,Array[(String, Int)]] = Map(tom -> Array((tom,1)), jerry -> Array((jerry,1)), hello -> Array((hello,1), (hello,1), (hello,1), (hello,1)))

解釋說明:
這里的意思是將上面的array按照key的方式進(jìn)行分組

4、最后將結(jié)果進(jìn)行求和

arr.flatMap(_.split(" ")).map((_,1)).groupBy(_._1).map(t=>(t._1,t._2.size))

其中t._1就是上面的單詞作為key,value是t._2.size,即Array的大小

方式二:

arr.flatMap(_.split(" ")).map((_,1)).groupBy(_._1).mapValues(_.foldLeft(0)(_+_._2))

其中:
arr.flatMap(.split(” “)).map((,1)).groupBy(_._1),這里和上面的一樣,不用贅述

scala> arr.flatMap(_.split(" ")).map((_,1)).groupBy(_._1) res4: scala.collection.immutable.Map[String,Array[(String, Int)]] = Map(tom -> Array((tom,1)), jerry -> Array((jerry,1)), hello -> Array((hello,1), (hello,1), (hello,1), (hello,1)))

mapValues的用途是直接將Array的內(nèi)容進(jìn)行按照key相同的進(jìn)行統(tǒng)計(jì)計(jì)算。
.foldLeft(0)(+._2) 第一個(gè)下劃線表示的是的是數(shù)組中的key,意思是分別取出其中的Array集合,.foldLeft(0)(+_.2)表示將Array進(jìn)行求和,后邊括號中的第一個(gè)下劃線表示的是處事值0,第二個(gè)下劃線是表示的是元組,.2表示的是元組中的第二個(gè)值,即單詞出現(xiàn)的次數(shù)。

總結(jié)

以上是生活随笔為你收集整理的Scala中使用两种方式对单词进行次数统计(wordCount)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。