如何在列表中获取每个项目及其右侧的所有项目? [斯卡拉]

how to take each item with all items of the right of it in a list? [scala]

假设我有如下所示的一维数组或列表:

val a = Array(1, 5, 7, 9)

我想生成一个结果(二维数组或元组列表),其中

Array[(1,5), (1,7), (1,9), (5,7), (5,9), (7,9)]

我如何在 Scala 中做到这一点?

这是我尝试过的:

val c = for (a_ <- a; b_ <- a) yield (a_, b_)

问题c现在有:

Array((1,1), (1,5), (1,7), (1,9), (5,1), (5,5), (5,7), (5,9), (7,1), (7,5), (7,7), (7,9), (9,1), (9,5), (9,7), (9,9))

这是错误的结果,因为它不是笛卡尔积!

想要缩短代码?这是单行本。

a.zipWithIndex.flatMap{case (n,x) => a.drop(x+1).map(n -> _)}
//res0: Array[(Int, Int)] = Array((1,5), (1,7), (1,9), (5,7), (5,9), (7,9))

或者这个。

a.combinations(2).map(x=>(x(0),x(1))).toArray

我是这样解决的:尽我所能:

var tmpRes: ListBuffer[List[(Int, Int)]] = ListBuffer()
(0 until itemSet.size) foreach { i =>
      val left = List(itemSet(i))
      val (_, right) = itemSet.splitAt(i+1)
      val res:List[(Int, Int)] = for (left_ <- left; right_ <- right) yield (left_, right_)
      tmpRes += res
}

var combinations: ListBuffer[(Int, Int)] = tmpRes.flatMap(x => x)
combinations.foreach(println)

如果有人有更好的解决方案,请分享:)