• Scala集合习题Ⅱ


     行是知之始,知是行之成。——陶行知

    目录

    练习题 3 :求出各城市的平均温度

    练习题4:请用scala得出以下的结果


    练习题 3 :求出各城市的平均温度

    val d1 = Array(("bj", 28.1), ("sh", 28.7), ("gz", 32.0), ("sz", 33.1))
    val d2 = Array(("bj", 27.3), ("sh", 30.1), ("gz", 33.3))
    val d3 = Array(("bj", 28.2), ("sh", 29.1), ("gz", 32.0), ("sz", 30.5))

    OUT===>

    (gz,32.43)
    (bj,27.87)
    (sz,31.80)
    (sh,29.30)

    1. /**
    2. * @author:码到成龚
    3. * my motoo:"听闻少年二字,应与平庸相斥。"
    4. * 个人代码规范:
    5. * 1,原始数据的变量命名:①只使用单个单词即数据的类型:无嵌套的数据结构②被嵌套的数据结构类型_嵌套的数据结构类型:嵌套的数据结构
    6. * 2,接收结果的变量命名:①包含的数据类型1_包含的数据类型2_返回的变量类型_表达式中使用到的函数1_表达式中使用到的函数2
    7. * 3,调用函数时的注释:①数据调用第一个函数输出的结果为:函数名-OUT;函数名-OUT....以此类推
    8. *
    9. */
    10. object Test3 {
    11. def main(args: Array[String]): Unit = {
    12. val d1 = Array(("bj", 28.1), ("sh", 28.7), ("gz", 32.0), ("sz", 33.1))
    13. val d2 = Array(("bj", 27.3), ("sh", 30.1), ("gz", 33.3))
    14. val d3 = Array(("bj", 28.2), ("sh", 29.1), ("gz", 32.0), ("sz", 30.5))
    15. val d4=(d1.union(d2).union(d3)).toBuffer // 将三个同类的序列进行合并
    16. val res_map=d4.groupBy(f=>f._1).
    17. mapValues(
    18. key=>key.map(
    19. f=>f._2)).mapValues(
    20. key=>((key.reduce((a,b)=>a+b))/key.size).formatted("%.2f")
    21. )
    22. /**
    23. * groupBy-OUT:Map(gz -> ArrayBuffer((gz,32.0), (gz,33.3), (gz,32.0)), bj -> ArrayBuffer((bj,28.1), (bj,27.3), (bj,28.2)), sz -> ArrayBuffer((sz,33.1), (sz,30.5)), sh -> ArrayBuffer((sh,28.7), (sh,30.1), (sh,29.1)))
    24. *mapValues-OUT:Map(gz -> ArrayBuffer(32.0, 33.3, 32.0), bj -> ArrayBuffer(28.1, 27.3, 28.2), sz -> ArrayBuffer(33.1, 30.5), sh -> ArrayBuffer(28.7, 30.1, 29.1))
    25. *mapValues_reduce-OUT:Map(gz -> 97.3, bj -> 83.60000000000001, sz -> 63.6, sh -> 87.9)
    26. *formatted-OUT:Map(gz -> 32.43, bj -> 27.87, sz -> 31.80, sh -> 29.30)
    27. */
    28. res_map.foreach(println) // 遍历map集合
    29. /**foreach-OUT:
    30. * (gz,32.43)
    31. * (bj,27.87)
    32. * (sz,31.80)
    33. * (sh,29.30)
    34. */
    35. }
    36. }

    练习题4:请用scala得出以下的结果

    List("Id1-The Spark", "Id2-The Hadoop Yarn", "Id3-The Spark Yarn")

    OUT===>

    Spark:Id1 Id3
    Hadoop:Id2
    The:Id1 Id2 Id3
    Yarn:Id2 Id3

    1. import scala.collection.mutable
    2. /**
    3. * @author:码到成龚
    4. * my motoo:"听闻少年二字,应与平庸相斥。"
    5. * 个人代码规范:
    6. * 1,原始数据的变量命名:①只使用单个单词即数据的类型:无嵌套的数据结构②被嵌套的数据结构类型_嵌套的数据结构类型:嵌套的数据结构
    7. * 2,接收结果的变量命名:①包含的数据类型1_包含的数据类型2_返回的变量类型_表达式中使用到的函数1_表达式中使用到的函数2
    8. * 3,调用函数时的注释:①数据调用第一个函数输出的结果为:函数名-OUT;函数名-OUT....以此类推
    9. *
    10. */
    11. object Test4 {
    12. def main(args: Array[String]): Unit = {
    13. val string_list = List("Id1-The Spark", "Id2-The Hadoop Yarn", "Id3-The Spark Yarn")
    14. val array_list =
    15. string_list.map(
    16. string => string.split("[-| ]").toBuffer)
    17. /**
    18. * split_toBuffer-OUT:List(ArrayBuffer(Id1, The, Spark), ArrayBuffer(Id2, The, Hadoop, Yarn), ArrayBuffer(Id3, The, Spark, Yarn))
    19. *
    20. */
    21. var tup2_m_arr = mutable.ArrayBuffer[(String, String)]()
    22. for (arr <- array_list) { // 遍历最外层的列表,得到数组
    23. for (elem <- 1 until arr.length) { // 遍历内层的数组,得到索引
    24. tup2_m_arr.append((arr(elem), arr(0))) // 将遍历到的数组添加进入创建的可变数组中
    25. /**
    26. * 观察输出的结果可知,是以Id后面的单词作为键,Id为值,
    27. * 因此,在添加元素的时候,不遍历第一个元素,直接指定即可
    28. */
    29. }}
    30. /*
    31. println(tup2_m_arr)-OUT:ArrayBuffer((The,Id1), (Spark,Id1), (The,Id2), (Hadoop,Id2),(Yarn,Id2), (The,Id3), (Spark,Id3), (Yarn,Id3))
    32. */
    33. val array_map = (tup2_m_arr.groupBy(
    34. tup2 => tup2._1
    35. ).mapValues(
    36. key => key.map(tup2 => tup2._2)
    37. ).mapValues(
    38. key => key
    39. ))
    40. /*
    41. *groupBy-OUT:Map(Hadoop -> ArrayBuffer((Hadoop,Id2)), Yarn -> ArrayBuffer((Yarn,Id2), (Yarn,Id3)), Spark -> ArrayBuffer((Spark,Id1), (Spark,Id3)), The -> ArrayBuffer((The,Id1), (The,Id2), (The,Id3)))
    42. mapValues-OUT:Map(Hadoop -> ArrayBuffer(Id2), Yarn -> ArrayBuffer(Id2, Id3), Spark -> ArrayBuffer(Id1, Id3), The -> ArrayBuffer(Id1, Id2, Id3))
    43. */
    44. // 观察如上的数据,接下来只需要遍历输出即可
    45. array_map.foreach(
    46. // 得到被嵌套在数组中的元素
    47. tup2=>{
    48. var string="" // 空的字符串用于存放数组中的元素
    49. for (elem <- tup2._2) { // 遍历数组中的元素
    50. string+=elem+" " // 将遍历到的数据存放入字符串中
    51. }
    52. println(s"${tup2._1}:${string}") // 打印输出结果
    53. }
    54. )
    55. }
    56. }

    如果对以上的代码有任何问题的,请在评论区留言。

    如果觉得代码有更优的解,也欢迎在评论区展示您的代码。

  • 相关阅读:
    centos安装nexus3.x版本
    C#文件拷贝工具
    Django系列:Django简介与MTV架构体系概述
    快手如何玩转复杂场景下的说话人识别?| ASRU 2021
    开发企业微信群机器人,实现定时提醒
    Gauva的ListenableFuture
    C++ Reference: Standard C++ Library reference: Containers: deque: deque: size
    Go语言 接口与类型
    修改huggingface的缓存路径
    二十三种设计模式-解密状态模式:优雅地管理对象状态
  • 原文地址:https://blog.csdn.net/weixin_53046747/article/details/128122073