2015-04-15 2 views
1

Как я могу объединить в короткие сроки две карты своими ключами, но они могут иметь разные ключи. Например, у меня естьСлияние разных карт по клавишам

val query1 = Map(("email", "[email protected]"), ("phone", "ph0997832")) 
val query2 = Map(("email", "[email protected]"), ("fax", "fax0997832")) 

И я хочу что-то вроде этого:

List("email", "phone", "fax") 
List(List("[email protected]", "ph0997832", ""), List("[email protected]", "", "fax0997832")) 
+0

дубликата http://stackoverflow.com/questions/20047080/scala-merge-map – ipoteka

ответ

2

Использование:

scala> val queries = List(query1, query2) 
queries: List[Map[String,String]] = List(
             Map(email -> [email protected], phone -> ph0997832), 
             Map(email -> [email protected], fax -> fax0997832) 
            ) 

Получение ключей достаточно легко; называют .keys на каждом Map, распрямите результат и удалить дубликаты:

scala> val keys = queries.flatMap(_.keys).distinct 
keys: List[String] = List(email, phone, fax) 

Получение второго списка; получить значение всех ключей для запросов, используя .getOrElse(k, ""), чтобы получить пустую строку вместо None:

scala> queries.map(q => keys.map(k => q.getOrElse(k, ""))) 
res0: List[List[String]] = List(List([email protected], ph0997832, ""), 
           List([email protected], "", fax0997832)) 
Смежные вопросы