首页 > 解决方案 > 如何将切片从数组位置带到数组末尾?

问题描述

如何获得具有这样元素的数组数组?是否有一个内置的 scala api 可以提供这个值(不使用组合)?

例如

val inp = Array(1,2,3,4)

输出

Vector(
  Vector((1,2), (1,3), (1,4)), 
  Vector((2,3), (2,4)), 
  Vector((3,4))
)

我的答案如下。我觉得在 scala 中应该有一个比这更优雅的答案。

  val inp = Array(1,2,3,4)
  val mp = (0 until inp.length - 1).map( x => {
    (x + 1 until inp.length).map( y => {
      (inp(x),inp(y))
    })
  })

  print(mp)

+Edit 添加了组合约束。

标签: arraysscala

解决方案


在每个组合的第一个元素 ( ) 上使用combinations(2)and将为您提供所需的值和结构。获得结果需要使用一些转换groupBy()0Vector[Vector]]toVector

scala> inp.combinations(2).toList.groupBy(a => a(0)).values
res11: Iterable[List[Array[Int]]] = MapLike.DefaultValuesIterable
(
 List(Array(2, 3), Array(2, 4)),
 List(Array(1, 2), Array(1, 3), Array(1, 4)),
 List(Array(3, 4))
)

推荐阅读