【问题标题】:How to check if combination of key,value pair exists in Map如何检查Map中是否存在键值对组合
【发布时间】:2019-12-02 23:27:57
【问题描述】:

我正在尝试解决一个问题,我想检查 Map 中是否存在一对键值 我有这样的地图:

val codemap = new Map[String, List[String]]

我想用静态值制作地图

val codeMap = Map(
  "Asset Banking" -> List("audio","doc"),
  "avalon" -> List("adaptive-module", "ebook-plus")
)

我有 2 个动态变量:

val a: Option[String] = Option("Asset Banking")
val b: Option[String] = Option("audio")

我想检查 a&B 的组合是否存在:

我能想到的逻辑是

    if(codemap.key.contains (a))
    {
      if(codemap.values exist for above key)
         then do something 

     }else
     {
       do something
     }

这是解决这个问题的好方法吗? 这是流数据a,b 是来自流的字段 我想根据a,b的值填充表中的第三个字段c

a,b 需要是一些将存储在地图中的组合。

【问题讨论】:

    标签: scala dictionary scala-collections


    【解决方案1】:

    find 可以对 Map 中每个元素的 keyvalue 进行操作,如果该值存在于 Map 中,则返回 Option

    scala> codeMap.find({case (a,b) => a  == "Asset Banking" && b == List()})
    res14: Option[(String, List[String])] = None
    
    scala> codeMap.find({case (a,b) => a  == "Asset Banking" && b == List("audio", "doc")})
    res15: Option[(String, List[String])] = Some((Asset Banking,List(audio, doc)))
    

    【讨论】:

    • 我能否在 if 语句中使用 codemap.find。如果组合存在,我希望 if 为真。
    • if 语句需要一个布尔值,因此要使用它,您必须在返回的 Option 值上调用 isDefined
    • 最好使用exists
    【解决方案2】:

    试试

    (for {
      k <- a
      v <- b
      l <- codeMap.get(k)
    } yield {
      l.contains(v)
    }).getOrElse(false)
    

    如果找到组合则输出true,否则输出false

    【讨论】:

    • 如果地图中存在组合,我希望条件为真。结果给了我价值观。如果组合不存在,结果将为空。 @mario Galic
    • 添加l &lt;- codeMap.get(k) 作为第三个生成器。然后你可以yield l.contains(v) 这应该通过codeMap 减少迭代。
    猜你喜欢
    • 2012-05-21
    • 2020-08-18
    • 2012-03-27
    • 2016-03-20
    • 1970-01-01
    • 2013-02-18
    • 1970-01-01
    • 2017-12-10
    • 2020-07-11
    相关资源
    最近更新 更多