Scala如何将存储图环的二维Array打印为指定格式?
解决代码
你可以直接用Scala函数式语法实现,不需要写复杂的循环判断:
// 你的环数据 val result: Array[Array[Long]] = Array( Array(0, 1, 4, 0), Array(1, 5, 2, 1), Array(1, 4, 0, 1), Array(2, 3, 5, 2), Array(2, 1, 5, 2), Array(3, 5, 2, 3), Array(4, 0, 1, 4), Array(5, 2, 3, 5), Array(5, 2, 1, 5) ) // 处理并打印逻辑 result .groupBy(_.head) // 按环的起始节点分组 .toSeq .sortBy(_._1) // 按起始节点升序排列,保证输出顺序符合要求 .foreach { case (start, cycles) => // 每个环去掉最后重复的首尾节点,拼接成箭头连接的字符串 val cycleItems = cycles.map(_.dropRight(1).mkString("->")) // 按要求格式输出整行 println(s"$start:${cycleItems.mkString(";")};") }
运行后输出和你要求的格式完全一致。
你之前遇到的问题说明
- for循环无法用if/else的误区:Scala的for循环内完全支持普通if/else分支判断,你看到的for后跟if是「守卫语法」用于过滤元素,和循环体内的if/else不冲突,只是命令式写法不如函数式写法简洁。
- groupBy后内容异常的问题:你看到的
[J@xxxx是Java数组默认的toString返回值(数组对象的哈希标识),不是内容损坏,只要直接操作数组元素取值处理即可,比如用mkString就可以正常查看数组内容。
内容的提问来源于stack exchange,提问作者Michael Qiao
相关产品推荐
相关产品推荐

