首页 > 其他分享 >Scala练习

Scala练习

时间:2023-06-23 21:22:31浏览次数:31  
标签:String val Scala Double 练习 list tp Array

wordCount

package com.doit.day03

import scala.io.{BufferedSource, Source}

object WordCountDemo {
  def main(args: Array[String]): Unit = {
    //读取文件,获取到一个Source对象
    val source: BufferedSource = Source.fromFile("D:\\develop\\ideaWorkSpace\\myself\\study\\scalaDemo\\data\\word.txt")
    //调用getLines方法,获取到每一行数据,每一行数据都放在迭代器中
    val lines: Iterator[String] = source.getLines()
    //如果我现在直接这么返回,他的返回值是什么??   Iterator[String]  ==》 同样的返回一个迭代器,迭代器里面放得是Array[String] 数组里面每一个元素放得都是一个个的单词
    val arrWord: Iterator[Array[String]] = lines.map(line => {
      //1.需要将每一行数据拿出来进行切割,变成一个个的单词
      //hello   hadoop  hive
      val wordsArr: Array[String] = line.split("\\s+")
      wordsArr
    })
    //将迭代器转换成了集合
    val list: List[Array[String]] = arrWord.toList
    //将list中的array压平,这样list装的就是每一个单词了
    val word: List[String] = list.flatten
    //对每一个单词进行分组,相同的单词分在一组,key就是单词,value是一个list,所有相同的单词都放在这个list中
    val wordAndList: Map[String, List[String]] = word.groupBy(word => word)
    //转换,将list转换成长度,长度就是单词的个数
    val wordCount: Map[String, Int] = wordAndList.map(tup => (tup._1, tup._2.size))
    //查看结果
    println(wordCount)
  }
}

平均温度案例

package com.doit.day03

/**
 * 需求:求最近几天每个城市的平均温度
 */
object AvgTem {
  def main(args: Array[String]): Unit = {
    val d1 = Array(("beijing", 28.1), ("shanghai", 28.7), ("guangzhou", 32.0), ("shenzhen", 31.0))
    val d2 = Array(("beijing", 27.3), ("shanghai", 30.1), ("guangzhou", 33.3))
    val d3 = Array(("beijing", 28.2), ("shanghai", 29.1), ("guangzhou", 32.0), ("shenzhen", 32.0))

    //1.将所有的数据都放在一个数组或者集合中
    val allData: Array[(String, Double)] = d1 ++ d2 ++ d3
    //Array(("beijing", 28.1), ("shanghai", 28.7), ("guangzhou", 32.0), ("shenzhen", 33.1),("beijing", 27.3), ("shanghai", 30.1), ("guangzhou", 33.3),("beijing", 28.2), ("shanghai", 29.1), ("guangzhou", 32.0), ("shenzhen", 32.1))

    //按照城市分组
    val grouped: Map[String, Array[(String, Double)]] = allData.groupBy(tp => tp._1)

    //方式一,获取到所有的温度,sum求和后求平均
    val res: Map[String, Double] = grouped.map(tp => {
      //数组中每一个元素的key都是一样的,只是温度不一样,现在需要将整个数组转换成城市,平均温度
      val value: Array[(String, Double)] = tp._2
      val avg: Double = value.map(_._2).sum / value.length
      (tp._1, avg)
    })
    println(res)


    //方式二,只对value进行处理
    val res1: Map[String, (String, Double)] = grouped.mapValues(tp => {
      val avg: Double = tp.reduce(_._2 + _._2) / tp.length
      (tp(0)._1, avg)
    })

  }
}

共同好友案例

package com.doit.day03

import scala.io.{BufferedSource, Source}

/**
 * 数据如下  :每个字母代表一个人 ,  统计任意一个人和其他人的共同好友
 * A:B,C,D,F,E,O
 * B:A,C,E,K
 * C:F,A,D,I
 * D:A,E,F,L
 * E:B,C,D,M,L
 * F:A,B,C,D,E,O,M
 * G:A,C,D,E,F
 * H:A,C,D,E,O
 * I:A,O
 * J:B,O
 * K:A,C,D
 * L:D,E,F
 * M:E,F,G
 * O:A,H,I,J
 */
object SameFriends {
  def main(args: Array[String]): Unit = {
     val lines: Iterator[String] = Source.fromFile("D:\\develop\\ideaWorkSpace\\myself\\study\\scalaDemo\\data\\friends").getLines()
     val myAndFriends: List[(String, Array[String])] = lines.toList.map(line => {
        //        A:B,C,D,F,E,O   :前面的是我自己,:后面的是我的朋友们
        val arr: Array[String] = line.split(":")
        //获取到我自己
        val user: String = arr(0)
        //获取到我的朋友们,朋友们都放在数组里面,里面的元素就是一个个的朋友对象
        val friends: Array[String] = arr(1).split(",")
        (user, friends)
     })

     //获取共同好友。。。
     for(i <- 0 until myAndFriends.length){
        for(j <- i+1 until myAndFriends.length){
           //从第一个元素开始取
           val tuple: (String, Array[String]) = myAndFriends(i)
           val tuple1: (String, Array[String]) = myAndFriends(j)
           //看是不是有共同好友,是不是取交集
           val sameFriends: Array[String] = tuple._2.intersect(tuple1._2)
           println("用户:"+tuple._1+"用户:"+tuple1._1+"的共同好友是:"+sameFriends.mkString(","))
        }
     }
  }
}

标签:String,val,Scala,Double,练习,list,tp,Array
From: https://www.cnblogs.com/paopaoT/p/17500207.html

相关文章

  • PHP练习
    题目一:40<?phpif(isset($_GET['c'])){$c=$_GET['c'];if(!preg_match("/[0-9]|\~|\`|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\-|\=|\+|\{|\[|\]|\}|\:|\'|\"|\,|\<|\.|\>|\/|\?|\\\\/i&qu......
  • scala异常和IO
    异常处理语法处理上和Java类似,但是又不尽相同。java的异常处理publicclassExceptionDemo{publicstaticvoidmain(String[]args){try{inta=10;intb=0;intc=a/b;}catch(ArithmeticExceptione){//catch时,需要将范围小的写到前面e.printSt......
  • python练习-爬虫
    场景:1、网址hppt://xxx.yyy.zzz.cn2、打开网页后显示:  3、填上姓名身份证和验证码,点击查询后,返回查询结果。 4、页面有cookie。方案一:程序中嵌入浏览器根据网址打开得到页面,然后程序读取记录自动填写数据,程序截取验证码图片,然后解析,并且填入验证码然后程序点击查......
  • matlab练习程序(无迹变换)
    当数据通过非线性函数后,分布不再是高斯分布时,可以用无迹变换估计新数据的均值与方差。算法原理就是在原始数据均值周围根据方差选取一些待使用点,然后将这些点通过非线性函数,再通过加权平均的方式求出新分布的均值与方差。如果我们选取的点非常多,并且将这些点都通过非线性函数,再......
  • Scala最新书籍-《函数式编程科学之Scala实战》pdf级随书代码分享
        这本书对函数式编程所需要的理论知识的系统性的阐述。本书从基本原理讲起,包含了所有详细地解释、推导和证明。读者需要通过长时间的精神集中和努力学习困难的概念。这本书需要一定的数学基础,至少对基础代数比较了解。        文末附本书最新pdf及随书代码下载地址......
  • SQL基础命令练习
     1.创建一个名为`mydb`的数据库2.在`mydb`数据库中创建一个名为`users`的表,包含以下字段:`id`(主键,自增长),`name`(字符串,非空),`age`(整数),`gender`(字符串)3.向`users`表中插入一条记录,姓名为`Tom`,年龄为`25`,性别为`男`4.查询`users`表中所有记录5.将`users`表......
  • 练习记录-cf-Codeforces Round 881 (Div. 3)A-F1
    E是补的太蠢了没想到期末考完的复健A.SashaandArrayColoring题意:可以给不同数字涂上很多颜色,每个颜色的贡献是同一个颜色内的数字最大值和最小值的差思路:排序一遍,取头和尾的差#include<bits/stdc++.h>#defineclosestd::ios::sync_with_stdio(false),cin.tie(0)......
  • python 生成小学计算练习 docx
    python3生成二年级下计算练习,有口算,有竖式。 importrandomimportosfromdocx.sharedimportPtfromdocximportDocumentdefcreate_page(document):#口算document.add_paragraph('一、口算')operators='+-×÷'columnsNumber=3rowsNumbe......
  • 计数练习
    计数练习CF840COntheBench考虑\(xy,xz\)是完全平方数,\(yz\)同样也是于是我们可以对此划分等价类,每个等价类里的数不能相邻我们发现在插入一个等价类后一些不合法的也可能变合法,因此我们这里要记录一些不合法的信息考虑\(dp_{i,j}\)表示前\(i\)个等价类中有\(j\)个不合......
  • MySQL单表查询练习(条件_模糊_分组_聚合_排序)
    练习所用数据表•部门表CREATETABLEDEPT(DEPTNOINTPRIMARYKEY,–部门编号DNAMEVARCHAR(14),–部门名称LOCVARCHAR(13)–部门地址);INSERTINTODEPTVALUES(10,‘ACCOUNTING’,‘NEWYORK’);INSERTINTODEPTVALUES(20,‘RESEARCH’,‘DALLAS’);......