模式匹配Scala Map类型
发布时间:2020-12-16 09:20:15 所属栏目:安全 来源:网络整理
导读:想象一下,我在 Scala中有一个Map [String,String]. 我想匹配地图中的全套键值配对. 这样的东西应该是可能的 val record = Map("amenity" - "restaurant","cuisine" - "chinese","name" - "Golden Palace")record match { case Map("amenity" - "restaurant",
想象一下,我在
Scala中有一个Map [String,String].
我想匹配地图中的全套键值配对. 这样的东西应该是可能的 val record = Map("amenity" -> "restaurant","cuisine" -> "chinese","name" -> "Golden Palace") record match { case Map("amenity" -> "restaurant","cuisine" -> "chinese") => "a Chinese restaurant" case Map("amenity" -> "restaurant","cuisine" -> "italian") => "an Italian restaurant" case Map("amenity" -> "restaurant") => "some other restaurant" case _ => "something else entirely" } 编译器抱怨: error:value Map不是一个case类构造函数,也没有一个unapply / unapplySeq方法 目前在地图中为键值组合模式匹配的最佳方式是什么? 解决方法
模式匹配不是你想要的.你想找到A是否完全包含B
val record = Map("amenity" -> "restaurant","name" -> "Golden Palace") val expect = Map("amenity" -> "restaurant","cuisine" -> "chinese") expect.keys.forall( key => expect( key ) == record( key ) ) 编辑:添加匹配条件 这样,您可以轻松添加匹配条件 val record = Map("amenity" -> "restaurant","name" -> "Golden Palace") case class FoodMatcher( kv: Map[String,String],output: String ) val matchers = List( FoodMatcher( Map("amenity" -> "restaurant","cuisine" -> "chinese"),"chinese restaurant,che che" ),FoodMatcher( Map("amenity" -> "restaurant","cuisine" -> "italian"),"italian restaurant,mama mia" ) ) for { matcher <- matchers if matcher.kv.keys.forall( key => matcher.kv( key ) == record( key ) ) } yield matcher.output 得到: 名单(中餐馆,che che) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |