【问题标题】:How to make a tuple from a list in scala?如何从scala中的列表中创建一个元组?
【发布时间】:2019-10-01 12:58:43
【问题描述】:

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

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

【问题讨论】:

    标签: scala collections immutability


    【解决方案1】:

    希望它会有所帮助。

    val list = List("aa","1","bb","2","cc","3","dd","4")
    
    val tuple =
    list.grouped(2).map { e =>
      (e.head,e.last)
    }.toList
    

    【讨论】:

    • 注意如果我们在toList之前map我们只需要迭代一次,所以list.grouped(2).map(...).toList而不是list.grouped(2).toList.map(...),因为grouped返回一个Iterator
    • 感谢@maria Galic 的反馈。而你的回答给了我更多解决这个问题的方法。
    【解决方案2】:

    我们应该考虑大小奇数列表的情况,例如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
    

    【讨论】:

    • 如果我们删除例如这会爆炸列表中的“4”。我更喜欢@Mahesh Chand 的回答(顺便说一句,sliding(2, 2)grouped(2) 相同)。
    • @slouc 也许比给出错误答案更好,例如(dd,dd)grouped
    • 可能是,取决于需要。但在这种情况下,我更愿意将所有内容包装在 Option 中,而不是在运行时爆炸。
    • 在我看来,这看起来好多了!但同样,取决于 OP 需要什么。就我个人而言,我会将其保留在 Option 中以表明可能存在错误,除非我可以默默地忽略它并简单地删除最后一个元素(就像在您的解决方案中一样)。
    猜你喜欢
    • 2013-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-16
    • 1970-01-01
    • 1970-01-01
    • 2016-01-05
    相关资源
    最近更新 更多