Scala 读取文件并统计单词出现次数 - 代码详解
Scala 读取文件并统计单词出现次数 - 代码详解
以下代码展示了如何使用 Scala 读取一个文本文件,并统计每个单词出现的次数。
import scala.io.Source
object shiyan2_3 {
def main(args: Array[String]): Unit = {
// 定义一个名为main的方法,接收一个字符串数组类型的参数args,并返回一个Unit类型的值
val filename = 'file.txt'
val source = Source.fromFile('D:\test.txt') // 从文件中读取数据,返回一个Source类型的对象
val list = source.getLines().toList // 获取source对象中的所有行,并将其转换为List类型
source.close()
var wordList: List[String] = list.flatMap(_.split(' ')) // 将list中的每一行按空格分割成单词,并将所有单词合并到一个List中
var wordtuples: List[(String, Int)] = wordList.map((_, 1)) // 将wordList中的每个单词转换为一个元组,第一个元素为单词本身,第二个元素为1
val wordgroup: Map[String, List[(String, Int)]] = wordtuples.groupBy(kv => kv._1) // 将wordtuples按照第一个元素(即单词本身)进行分组,返回一个Map类型的对象,其中键为单词本身,值为包含该单词所有元组的List
var wordcount: Map[String, Int] = wordgroup.mapValues(list => list.size) // 将wordgroup中的每个键值对(即每个单词及其对应的元组List)转换为一个新的键值对,其中键为单词本身,值为该单词在元组List中出现的次数
println(wordcount)
}
}
代码解释
-
def main(args: Array[String]): Unit = { ... }:- 定义一个名为
main的方法,接收一个字符串数组类型的参数args,并返回一个Unit类型的值。 - 在 Scala 中,
Unit类型表示没有返回值的函数或方法。在这个例子中,main方法不需要返回任何值,因此返回Unit类型。 main方法是程序的入口点,当程序运行时,会首先执行main方法。
- 定义一个名为
-
val filename = 'file.txt':- 定义一个名为
filename的变量,并将其赋值为 'file.txt',用于存储要读取的文件名。
- 定义一个名为
-
val source = Source.fromFile('D:\test.txt'):- 使用
Source.fromFile()方法从指定路径的文件读取数据,返回一个Source类型的对象。
- 使用
-
val list = source.getLines().toList:- 使用
getLines()方法获取source对象中的所有行,并使用toList方法将其转换为List类型。
- 使用
-
source.close():- 关闭
source对象,释放资源。
- 关闭
-
var wordList: List[String] = list.flatMap(_.split(' ')):- 使用
flatMap方法将list中的每一行按空格分割成单词,并将所有单词合并到一个新的List中。 _.split(' ')表示对list中的每个元素(即每行字符串)调用split(' ')方法,将其按空格分割成多个单词。
- 使用
-
var wordtuples: List[(String, Int)] = wordList.map((_, 1)):- 使用
map方法将wordList中的每个单词转换为一个元组,第一个元素为单词本身,第二个元素为 1。 (_, 1)表示创建一个包含两个元素的元组,第一个元素为当前单词,第二个元素为 1。
- 使用
-
val wordgroup: Map[String, List[(String, Int)]] = wordtuples.groupBy(kv => kv._1):- 使用
groupBy方法将wordtuples按照第一个元素(即单词本身)进行分组,返回一个Map类型的对象。 kv => kv._1表示将每个元组的第一个元素作为分组的键。
- 使用
-
var wordcount: Map[String, Int] = wordgroup.mapValues(list => list.size):- 使用
mapValues方法将wordgroup中的每个键值对(即每个单词及其对应的元组List)转换为一个新的键值对。 list => list.size表示对每个键值对的List值调用size方法,获取该单词在List中出现的次数。
- 使用
-
println(wordcount):
- 使用
println方法输出wordcountMap,其中包含每个单词及其出现的次数。
总结
这段代码展示了如何使用 Scala 的函数、集合操作和文件读取方法来读取文件并统计单词出现次数。通过学习这段代码,您可以了解 Scala 中的一些基本编程概念,例如函数、循环、集合操作等。
原文地址: https://www.cveoy.top/t/topic/kx0g 著作权归作者所有。请勿转载和采集!