无法使用 println 在 Scala 中显示结果

can not show result in scala using println

我正在开发一个 scala 脚本,它给出了数组元素的所有不同组合。 例如,假设我们有 Array(1,3,6,7)。所以,所需的结果应该是这样的:Array((1,3),(1,6),(1,7),(3,6),(3,7),(6,7))

 val test : Array[Int] = Array(1,3,6,7)
  val result = test.distinct.combinations(2).flatMap{ case Array(a,b) =>
    Array((a,b))
  }
  println(result)

但是这段代码没有打印出需要的结果。

编辑

为了增加需要,初始 table 应该是字符串而不是整数(这只是为了操作测试)。 Asuume 我有列表 val test = List("test", "tabdc", "efjh", "hlmn") 根据 @Luis Miguel Mejía Suárez 的提议,我生成了所有组合

val result: List[(String, String)] = List((test,tabdc), (test,efjh), (test,hlmn), (tabdc,efjh), (tabdc,hlmn), (efjh,hlmn))

使用

val result = test.distinct.combinations(2).collect {
  case a :: b :: Nil =>
    (a, b)}.toList

现在,我应该比较这些代码生成的每一对,以根据这些规则构造一个字符串:

换句话说:

在此示例中:最终结果应为 testabdctestabdc(所有连接部分之间的连接) 请问我该怎么做?

resultIteratorlazy,因此一种打印方法是使用 toSeq 实现它,例如:

println(result.toSeq) // prints List((1,3), (1,6), (1,7), (3,6), (3,7), (6,7))

好的,这段代码中发生了很多事情。

  1. combinations returns 一个 Iterator 本质上是懒惰的,所以这就是你看不到任何输出的原因;因为它根本没有计算任何东西。
    您可以尝试通过在末尾添加 toArray 来解决该问题,但这会给您带来错误的输出。

  2. Arrays 不应使用,尤其是在学习时,它们对 Java 互操作和性能调整很有用,但是正常的 Scala 代码不应该对这些事情感到好奇。
    不使用 Arrays 的原因列表包括:它们是可变的,它们是不变的,它们不是集合层次结构的一部分,它们的 equals 是引用而不是值,它们的 toString 没有很好地打印 Array 的内容;这就是为什么在末尾添加 toArray 不会解决问题。因此,我们应该在任何地方都使用 List

  3. 没必要 flatMap 一个简单的 map 就可以了。但是,由于 combinations 不能保证其输出的类型安全,最好使用 collect 以确保安全。

因此最终代码为:

val test = List(1, 3, 6, 7)
val result = test.distinct.combinations(2).collect {
  case a :: b :: Nil =>
    (a, b)
}.toList

可以看到代码运行 here.