【问题标题】:Scala: increment value while mapping for listsScala:在映射列表时增加值
【发布时间】:2013-06-06 18:11:46
【问题描述】:

我有一个字符串列表,比如

val myList = List("apple", "orange", "pear")

我想把它转换成一个字符串,比如“1) apple 2) orange 3) pear”。 我可以写一个 for 循环,但我认为在 Scala 中应该有这样的事情的单行。 我能想到的最好的单线是

val myString = myList.map(s => "1) " + s).mkString(" ")

但这会导致“1) 苹果 1) 橙子 1) 梨”。映射列表时如何增加值?

【问题讨论】:

标签: scala


【解决方案1】:

Easy peasy(带有string interpolation 的scala 2.10):

myList.zipWithIndex.map { case (cases, i) => s"${i + 1}) $cases" }

【讨论】:

  • 谢谢,(i+1) 后面少了一个加号,但是加了之后就可以了。现在我只需要了解它:)
  • 哦,这个版本更好:)
【解决方案2】:

老实说,我不会推荐它,但你可以真正让你的版本工作:

val myString = myList.map{var i=0; s => i+=1; i + ") " + s}.mkString(" ")

【讨论】:

    【解决方案3】:

    实际上,没有缺少加号。尝试一下。 我的小修改是在末尾添加 mkString。

    myList.zipWithIndex.map { case (cases, i) => s"${i + 1}) $cases" }.mkString(" ")
    

    【讨论】:

    • 好吧,was 缺少加号 :-)
    • 一个小改进建议,在zipWithIndex之前加上view myList.view.zipWithIndex.map { case (cases, i) => s"${i + 1}) $cases" }.mkString(" ") 这样中间列表就会懒惰地初始化
    【解决方案4】:

    我的解决方案是:

    myList.map{value => s"${myList.indexOf(value)+1}) $value"}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-27
      • 1970-01-01
      • 2022-01-26
      • 1970-01-01
      • 1970-01-01
      • 2021-05-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多