如何从scala中的列表制作一个元组?

phi*_*eas 0 collections scala immutability

我有清单说- List("aa","1","bb","2","cc","3","dd","4")

如何列出具有偶数和奇数位置的元组: (aa,1),(bb,2),(cc,3),(dd,4)

Mah*_*and 6

希望它会有所帮助。

val list = List("aa","1","bb","2","cc","3","dd","4")

val tuple =
list.grouped(2).map { e =>
  (e.head,e.last)
}.toList
Run Code Online (Sandbox Code Playgroud)

  • 注意,如果我们在toList之前映射,我们只需要迭代一次,所以list.grouped(2).map(...)。toList而不是list.grouped(2).toList.map(。 ..)”,因为“ grouped”会返回“ Iterator”。 (2认同)

Mar*_*lic 5

我们应该考虑奇怪大小的列表的情况,例如List("aa","1","bb","2","cc","3","dd")

  • 我们应该回去List((aa,1), (bb,2), (cc,3), (dd,dd))吗?
  • 我们应该删除最后一个元素并返回List((aa,1), (bb,2), (cc,3))吗?
  • 我们应该以某种方式表明错误,也许是Option
  • 我们应该崩溃吗?

以下是返回Option[List(String, String)]指示错误情况的示例:

def maybeGrouped(list: List[String]): Option[List[(String, String)]] =
  Try(
    list
      .sliding(2, 2)
      .map { case List(a,b) => (a, b) }
      .toList
  ).toOption
Run Code Online (Sandbox Code Playgroud)

  • 如果我们从列表中删除例如“4”,这将会爆炸。我更喜欢 @Mahesh Chand 的答案(顺便说一句,“滑动(2, 2)”与“分组(2)”相同)。 (2认同)
  • 可以的,看需求。但在这种情况下,我更愿意将所有内容包装在 Option 中,而不是在运行时爆炸。 (2认同)