arrays - Arrays.deepToString 和 Scala 数组
问题描述
考虑代码:
val arr2d = Array(Array(1, 2, 3), Array(4, 5, 6))
util.Arrays.deepToString(arr2d)
它在第二行失败并出现以下错误:
错误:(79, 30) 类型不匹配;
found : Array[Array[Int]]
required: Array[Object] 注意:Array[Int] <: Object,但是类 Array 在类型 T 中是不变的。您可能希望研究通配符类型,例如_ <: Object
. (SLS 3.2.10) util.Arrays.deepToString(arr2d)
它具有类型擦除的可能性,但我不确定如何使代码编译,尽管编译器试图提出解决方案。我更加困惑,因为类似的 Java 代码可以工作(即类似的东西Arrays.deepToString(new int[][] { { 1, 2, 3}, {4, 5, 6}})
)。
代码中有什么问题,如何解决?
解决方案
您可以使用模式匹配和递归编写自己的 deepToString:
def deepToString(array: Array[_]): String = array.map {
case arr: Array[_] => deepToString(arr)
case x => x.toString
}.mkString("[", ", ", "]")
val arr2d = Array(Array(1, 2, 3), Array(4, 5, 6))
val arr3d = Array(Array(Array(1,2,3), Array(4, 5, 6)), Array(Array(1,2,3), Array(4, 5, 6)))
deepToString(arr2d) // [[1, 2, 3], [4, 5, 6]]
deepToString(arr3d) // [[[1, 2, 3], [4, 5, 6]], [[1, 2, 3], [4, 5, 6]]]
只要 n 不足以导致堆栈溢出,这应该适用于 n 维数组。
推荐阅读
- css - 增加链接/按钮周围的背景大小
- ios - 反应性
在 UITableViewCell - image - 在循环内显示图像时减少循环开销
- pandas-groupby - 如何在熊猫中按两列分组
- python - 将查询结果显示到视图中
- javascript - 我想减去 2 个数组并得到第三个数组,它由第一个数组的剩余元素组成
- java - 有谁知道 Selenium 和 Appium 是否接受 Java 版本 12?
- python - 从报纸文章中提取古吉拉特语(谷歌输入工具支持的语言)文本
- python - 使用 pandas 保存大型 Excel 文件时出错
- javascript - 如何在 paypal.paypent.create 中声明变量并在外部使用