【问题标题】:Scala How to match two list to a Map or tupleScala如何将两个列表与地图或元组匹配
【发布时间】:2016-03-19 16:27:49
【问题描述】:
val listA = List("one", "two", "three")

val listB = List(1, 3, 4, 9, 2, 6)

结果:

val m: Map[String, Int] = Map(one -> 1, two -> 2, three -> 3)

我想将listAlistB 与具有相应键/值的Map 配对。我曾尝试使用zip 方法,但它只支持顺序合并。我怎样才能达到上述结果?

【问题讨论】:

    标签: list scala dictionary tuples


    【解决方案1】:

    如果f(x) 是一个函数,它可以为给定的字母值返回相应的数值,您可以将listA 中的每个x 映射到一对(x, f(x)),然后将结果对列表转换为使用.toMap 的地图。

    【讨论】:

    • 这不会过滤 listB 中的 f(x)。
    【解决方案2】:

    zipsorted 列表B:

    listA.zip(listB.sorted).toMap
    

    【讨论】:

    • 感谢您的回复。如果两个列表都不是数值呢?假设 listA = ("sheep", "cat", "dog"), listB = ("puppy", "kitten", "lamb")
    【解决方案3】:

    你打算:

    scala> val listA = List("one", "two", "three", "four")
    listA: List[String] = List(one, two, three, four)
    
    scala> val listB = List(1, 3, 4, 9, 2, 6)
    listB: List[Int] = List(1, 3, 4, 9, 2, 6)
    
    scala> val m = Map("one"->1, "two"->20, "three"->3)
    m: scala.collection.immutable.Map[String,Int] = Map(one -> 1, two -> 20, three -> 3)
    
    scala> listA flatMap { case k if (m contains k) && (listB contains m(k)) => Some(k, m(k)) ; case _ => None }
    res4: List[(String, Int)] = List((one,1), (three,3))
    

    【讨论】:

      猜你喜欢
      • 2017-03-22
      • 1970-01-01
      • 2014-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-15
      • 2023-03-19
      • 1970-01-01
      相关资源
      最近更新 更多