scala统计公司部门男女数量
时间: 2023-11-15 09:56:11 浏览: 36
假设我们有一个包含员工信息的列表,每个员工信息由姓名、性别和所在部门组成,例如:
```
val employees = List(("Alice", "female", "sales"), ("Bob", "male", "sales"), ("Charlie", "male", "engineering"), ("David", "male", "engineering"), ("Eve", "female", "marketing"))
```
我们可以使用Scala的集合操作来对该列表进行分组和聚合,以统计每个部门中男女员工的数量。下面是一个可能的实现:
```
val departmentCounts = employees.groupBy(_._3).mapValues(_.map(_._2).groupBy(identity).mapValues(_.size))
```
这个实现的原理是先按照部门对员工列表进行分组,然后对每个部门内的员工列表再按照性别进行分组,最后对每个部门内男女员工数量进行统计。这个实现的输出结果如下:
```
Map(sales -> Map(female -> 1, male -> 1), engineering -> Map(male -> 2), marketing -> Map(female -> 1))
```
这个结果表示,在销售部门中有1名女性和1名男性员工,在工程部门中有2名男性员工,在市场部门中有1名女性员工。
相关问题
scala读取本地磁盘txt文件统计公司部门男女数量
以下是一个scala代码示例,用于读取本地磁盘上的txt文件,统计公司部门中男女数量:
```scala
import scala.io.Source
object GenderCount {
def main(args: Array[String]): Unit = {
// 读取txt文件
val filename = "C:/data/employee.txt"
val source = Source.fromFile(filename)
// 统计男女数量
var maleCount = 0
var femaleCount = 0
for (line <- source.getLines) {
val fields = line.split(",")
val gender = fields(2)
if (gender == "M") maleCount += 1
else if (gender == "F") femaleCount += 1
}
// 输出结果
println("Male count: " + maleCount)
println("Female count: " + femaleCount)
// 关闭文件流
source.close()
}
}
```
在这个示例中,我们首先定义了一个`filename`变量,它包含本地磁盘上txt文件的路径。然后,我们使用`Source.fromFile`方法从文件中读取数据。我们使用`getLines`方法逐行迭代文件内容,并使用逗号分隔每行中的字段。我们将第三个字段视为性别,并使用if语句递增男女计数器。最后,我们输出结果并关闭文件流。
请注意,这只是一个简单的示例,可以根据实际情况进行修改和扩展。例如,您可能需要解析更复杂的文本格式,或者将结果保存到数据库中。
scala 词频统计
可以使用 Scala 实现一个简单的词频统计程序,以下是示例代码:
```scala
import scala.io.Source
object WordCount {
def main(args: Array[String]) {
val fileName = "input.txt"
val lines = Source.fromFile(fileName).getLines().toList
val words = lines.flatMap(_.split("\\W+"))
val wordCounts = words.groupBy(_.toLowerCase).mapValues(_.length)
val sortedWordCounts = wordCounts.toSeq.sortBy(-_._2)
sortedWordCounts.foreach { case (word, count) => println(s"$word: $count") }
}
}
```
以上代码读取名为 `input.txt` 的文件,并将其转换为行列表。然后,每行字符串通过正则表达式 `\\W+` 分割为单词列表,同时转换为小写。接着,使用 `groupBy` 方法将单词列表按照单词分组,并使用 `mapValues` 方法对每个组中的单词数量进行计数。最后,将单词计数映射转换为序列,并按照单词数量降序排序,最终输出每个单词及其计数。