Scala 代码分析:从文件读取数据并统计单词出现次数
Scala 代码分析:从文件读取数据并统计单词出现次数
import scala.io.Source
object shiyan2_3 {
def main(args: Array[String]): Unit = {
// 定义一个名为 filename 的常量,赋值为字符串 'file.txt'。
val filename = 'file.txt'
// 从文件 'D:\test.txt' 中读取数据,返回一个 Source 类型的对象。
val source = Source.fromFile('D:\test.txt')
// 获取 source 对象中的所有行,并将其转换为 List 类型。
val list = source.getLines().toList
// 关闭 source 对象,释放资源。
source.close()
// 将 list 中的每一行按空格分割成单词,并将所有单词合并到一个 List 中。
var wordList: List[String] = list.flatMap(_.split(' '))
// 将 wordList 中的每个单词转换为一个元组,第一个元素为单词本身,第二个元素为 1。
var wordtuples: List[(String, Int)] = wordList.map((_, 1))
// 将 wordtuples 按照第一个元素(即单词本身)进行分组,返回一个 Map 类型的对象,其中键为单词本身,值为包含该单词所有元组的 List。
val wordgroup: Map[String, List[(String, Int)]] = wordtuples.groupBy(kv => kv._1)
// 将 wordgroup 中的每个键值对(即每个单词及其对应的元组 List)转换为一个新的键值对,其中键为单词本身,值为该单词在元组 List 中出现的次数。
var wordcount: Map[String, Int] = wordgroup.mapValues(list => list.size)
// 打印 wordcount,即所有单词及其出现次数的 Map。
println(wordcount)
}
}
代码分析:
import scala.io.Source: 导入 Scala 标准库中的 Source 类,用于从文件或其他输入源中读取数据。object shiyan2_3: 定义一个名为 shiyan2_3 的单例对象。def main(args: Array[String]): Unit = { ... }: 定义一个名为 main 的方法,接收一个字符串数组类型的参数 args,并返回一个 Unit 类型的值。该方法是程序的入口点。val filename = 'file.txt': 定义一个名为 filename 的常量,赋值为字符串 'file.txt'。val source = Source.fromFile('D:\test.txt'): 从文件 'D:\test.txt' 中读取数据,返回一个 Source 类型的对象。val list = source.getLines().toList: 获取 source 对象中的所有行,并将其转换为 List 类型。source.close(): 关闭 source 对象,释放资源。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): 打印 wordcount,即所有单词及其出现次数的 Map。
总结:
这段代码演示了如何使用 Scala 从文件中读取数据,并统计每个单词出现的次数。代码中涉及到了一些重要的 Scala 函数,例如 flatMap、groupBy、mapValues 等,可以帮助你更好地理解 Scala 的函数式编程风格。
原文地址: https://www.cveoy.top/t/topic/kxSV 著作权归作者所有。请勿转载和采集!