【问题标题】:How to apply flatMap to list of tuples (Int,String) in Scala?如何将flatMap应用于Scala中的元组(Int,String)列表?
【发布时间】:2020-04-05 03:25:42
【问题描述】:

我在 Scala 中有以下 List 元组:

var a : List[(Int,String)] = List()
a = a:+((1,"bla bla bla"))
a = a:+((2,"la la la"))
a = a:+((3,"bla la bla"))

看起来像这样:

print(a)
List((1,bla bla bla), (2,la la la), (3,bla la bla))

我想要做的是应用flatMap 函数,以便从列表a 创建一个新列表,该列表仅包含它附加单词“附加”的元组中的字符串。因此结果应该是:

List(bla bla blaappended, la la laappended, bla la blaappended)

有人可以帮助我了解我该怎么做吗?我是 Scala 的新手,对此我无法理解。提前致谢

【问题讨论】:

    标签: list scala lambda functional-programming higher-order-functions


    【解决方案1】:

    你不需要flatMap,简单的map就足够了

    val result = a.map(t => t._2 + "appended")
    

    【讨论】:

      【解决方案2】:

      您不需要flatMap,您只需要map,因为您只想执行一对一的转换。
      此外,对于这种情况pattern matching 非常有帮助。
      (顺便说一句,请考虑阅读所有教程和其他基础教程)

      // Avoid mutability ;)
      val list : List[(Int,String)] = List(
        1 -> "bla bla bla",
        2 -> "la la la",
        3 -> "bla la bla"
      )
      
      val result = list.map {
        case (_, str) => s"${str} appended"
      }
      

      【讨论】:

      • 但是如果我有一个包含 10000000 个条目的列表并且不知道每个条目包含什么字符串怎么办?您的代码无法扩展
      • @hispaniccoder 你是什么意思?解决方案只是最后 3 行,即对map 的调用。它与 Andronicus 提出的代码完全相同。代码的开头只是以比您在问题上写的更惯用的方式创建列表。就这样。 - 我真的非常推荐您阅读 tour (答案中的链接) 和任何其他基本教程,因为您似乎仍然很难阅读和理解基本 Scala 代码。
      • 哦,是的,你是对的!我真的很抱歉,但我完全误解了这一点
      猜你喜欢
      • 2017-02-02
      • 1970-01-01
      • 2015-11-04
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 2017-07-13
      • 1970-01-01
      • 2013-11-06
      相关资源
      最近更新 更多