• Scala集合习题


    熟话说的好:”纸上得来终觉浅,绝知此事要躬行“,所以现在我就以下的习题,来巩固 之前我学习的几个常见集合函数,加深理解。

    目录

    练习题 1:计算分组后的list 分别对应的长度,和累加值

    练习题 2: 实现 wordcount


    练习题 1:计算分组后的list 分别对应的长度,和累加值

    List(("a", 10), ("b", 2), ("a", 3))

    OUT===>

    Map(b -> (2,5), a -> (2,13))

    解释:a的长度为2。b的长度为1。 a的累加值为13,b的累加值为2

    1. import scala.collection.mutable.ListBuffer
    2. /**
    3. * @author:码到成龚
    4. * my motoo:"听闻少年二字,应与平庸相斥。"
    5. */
    6. object Test1_1 {
    7. def main(args: Array[String]) {
    8. // 本例代码中的变量命名:①无嵌套的数据结构:只使用单个单词②嵌套的数据结构:被嵌套的数据结构_嵌套的数据结构
    9. // 接收结果的变量命名:①包含的元素1_包含的元素2_变量类型_表达式中使用到的函数
    10. // 调用函数时的注释:①数据调用第一个函数输出的结果为OUT①,调用第二个函数的结果为OUT②....以此类推
    11. println("="*20+"初始的两个map集合"+"="*22)
    12. val tup2_list=List(("a",10),("b",2),("a",3),("b",3))
    13. val tup2_map_gb_mp=tup2_list.groupBy(f=>f._1).mapValues(list=>list.size)
    14. /**
    15. * OUT①Map(a-> ListBuffer(("a",10),("a",3)),b -> ("b",2))
    16. * OUT②Map(b -> 1, a -> 2)
    17. */
    18. println(tup2_map_gb_mp)
    19. val tup2_map_gb_mp_rd_mp=tup2_list.groupBy(f=>f._1).mapValues(list=>list.reduce(
    20. (a,b)=>("sum",a._2+b._2)
    21. )).mapValues(f=>f._2)
    22. /**
    23. * OUT①Map(b -> ("b",2),a-> ListBuffer(("a",10),("a",3)))
    24. * OUT②Map(b -> ("b",2),
    25. * a-> ("sum",13))
    26. * OUT③Map(b -> 2,a-> 13)
    27. */
    28. println(tup2_map_gb_mp_rd_mp)
    29. println("="*22+"取出值与和组成元组(方法一)"+"="*22)
    30. val string_int_map=tup2_list.groupBy(f=>f._1).mapValues(
    31. key=>
    32. (key.size,key.map(f=>f._2).sum) // 将原value的长度与其和组成元组,组成新的map集合的value
    33. )
    34. /**
    35. *OUT①:groupBy=> Map(b -> ("b",2),a-> ListBuffer(("a",10),("a",3)))
    36. *OUT①:mapValues=> Map(b -> (2,5), a -> (2,13))
    37. */
    38. println(string_int_map)

    练习题 2: 实现 wordcount

    List("a b a a c d", "a d e s")

    实现统计单词的个数

    1 按照单词自然顺序升序

    2 按照单词个数从大到小排序

    OUT===>

    ====================按照字母从小到大排序====================
    (a,4)
    (b,1)
    (c,1)
    (d,2)
    (e,1)
    (s,1)
    ====================按照字母个数从大到小排序====================
    (a,4)
    (d,2)
    (e,1)
    (s,1)
    (b,1)
    (c,1)

    1. import scala.collection.mutable.{ArrayBuffer, ListBuffer}
    2. /**
    3. * @author:码到成龚
    4. * my motoo:"听闻少年二字,应与平庸相斥。"
    5. * 个人代码规范:
    6. * 1,原始数据的变量命名:①只使用单个单词即数据的类型:无嵌套的数据结构②被嵌套的数据结构类型_嵌套的数据结构类型:嵌套的数据结构
    7. * 2,接收结果的变量命名:①包含的数据类型1_包含的数据类型2_返回的变量类型_表达式中使用到的函数1_表达式中使用到的函数2
    8. * 3,调用函数时的注释:①数据调用第一个函数输出的结果为:函数名-OUT①;函数名-OUT②....以此类推
    9. *
    10. */
    11. object Test2 {
    12. def main(args: Array[String]): Unit = {
    13. /**
    14. * 实现 wordcount
    15. List("a b a a c d", "a d e s")
    16. 实现统计单词的个数
    17. 1 按照单词自然顺序升序
    18. 2 按照单词个数从大到小排序
    19. OUT===>
    20. */
    21. val string_list=List("a b a a c d", "a d e s").flatMap(f=>f.split(" ")) // flatmap直接将集合序列压平
    22. // 上面传入的参数f代表每一个字符串,使用split切割得到的为Array数组
    23. var tup2_arr=ArrayBuffer[(String,Int)]() // 可变数组
    24. val list_map_gb_mp_gb_mv=string_list.map(
    25. key=>(key,1)
    26. ).groupBy(
    27. tup=>tup._1
    28. ).mapValues(
    29. key=>
    30. key.size
    31. ) /**
    32. map-OUT①:List((a,1), (b,1), (a,1), (a,1), (c,1), (d,1), (a,1), (d,1), (e,1), (s,1))
    33. groupBy-OUT②:Map(e -> List((e,1)), s -> List((s,1)), a -> List((a,1), (a,1), (a,1), (a,1)), b -> List((b,1)), c -> List((c,1)), d -> List((d,1), (d,1)))
    34. mapValues-OUT③:Map(e -> 1, s -> 1, a -> 4, b -> 1, c -> 1, d -> 2)
    35. */
    36. for(i <- list_map_gb_mp_gb_mv.keys){
    37. tup2_arr.append((i,list_map_gb_mp_gb_mv(i)))
    38. }
    39. // array-OUT:ArrayBuffer((e,1), (s,1), (a,4), (b,1), (c,1), (d,2))
    40. println("="*20+"按照字母从小到大排序"+"="*20)
    41. (tup2_arr.sortWith(
    42. (a,b)=>a._1// 按照字母从小到大排序,即自然升序,也可以使用sorted函数
    43. )).foreach(println)
    44. // sortWith-OUT:ArrayBuffer((s,1), (e,1), (d,2), (c,1), (b,1), (a,4))
    45. /** foreach-OUT:
    46. * (a,4)
    47. (b,1)
    48. (c,1)
    49. (d,2)
    50. (e,1)
    51. (s,1)
    52. */
    53. println("="*20+"按照字母个数从大到小排序"+"="*20)
    54. (tup2_arr.sortWith(
    55. (a,b)=>a._2>b._2 // 按照字母个数从大到小排序
    56. )).foreach(println)
    57. //sortWith-OUT:ArrayBuffer((a,4), (d,2), (e,1), (s,1), (b,1), (c,1))
    58. /** foreach-OUT:
    59. * (a,4)
    60. (d,2)
    61. (e,1)
    62. (s,1)
    63. (b,1)
    64. (c,1)
    65. */
    66. }
    67. }

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

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

    有兴趣可以继续阅读:Scala集合习题Ⅱ_码到成龚的博客-CSDN博客

  • 相关阅读:
    【C++笔试强训】第八天
    基于Pango Design SuiteFPGA程序加载/固化——TMS320F28377D开发板
    SpringBoot文件上传下载案例
    基于数据驱动的变电站巡检机器人自抗扰控制
    20230925工作心得
    Kubernetes安装GitLab
    十八、CANdelaStudio深入-Data Types
    转行UI设计必看的5个建议优漫动游
    11-3 Iterator迭代器接口
    如何理解与学习数学分析——第二部分——数学分析中的基本概念——第7章——连续性
  • 原文地址:https://blog.csdn.net/weixin_53046747/article/details/128089916