2017-05-20 13 views
0

タイプAnyをスカラー型Mapに変換するにはどうすればよいですか?スカラーの `Map`を入力するAny型を変換する

今私は、このヴァルを持っている:

poop: scala.collection.immutable.Map[String,Any] = Map(scenario0 -> Map(street -> Bulevard, city -> Helsinki), scenario1 -> Map(street -> Bulevard, city -> Helsinki)) 

私はscenario0scenario1に関連付けられているMapオブジェクトを抽出し、関数に、これらのマップを渡ししようとしています。

+2

以下

例:あなたは地図[文字列、任意]を持つべきではありません。あなたがそれを避けることができる場合は、努力をしてください – pedrorijo91

+0

彼はできなかった前の質問について。それはインバウンドデータです。 – Zernike

答えて

3

1)あなたはMap[A, B]Anyをキャストすることができます。

例えば、以下は、あの)関数に

scala> def processSomething(mapping: Map[String, Any]) = println(mapping.keys) 
processSomething: (mapping: Map[String,Any])Unit 

scala> processSomething(mapping("key1").asInstanceOf[Map[String, Any]]) 
Set(key1.1) 

2を通過そしてAny

Map[A, B]から
scala> mapping("key1").asInstanceOf[Map[String, Any]] 
res3: Map[String,Any] = Map(key1.1 -> value1) 

をキャストするString to another Map

scala> val mapping : Map[String, Any] = Map("key1" -> Map ("key1.1" -> "value1"), "key2" -> Map("key1.2" -> 100)) 
mapping: Map[String,Any] = Map(key1 -> Map(key1.1 -> value1), key2 -> Map(key1.2 -> 100)) 

scala> mapping("key1") 
res1: Any = Map(key1.1 -> value1) 

Mapありますあなたの道はmainMap("key")の結果と一致します。

このようにして、結果が何らかの理由でMapではない場合に対応できます。 (はキャストで、それはクラスキャスト例外をスロー。)のみサイドノートとして

mapping("key1") match { 
    case valueMap : Map[String, Any] => processSomething(valueMap) 
    case _ => println("key1 is not Map") 
} 
+1

キーは問題ではなく、常に同じ機能を果たしているようです。 'poop.values.map(x => f(x.asInstanceOf [Map [String、Any]]))' – Zernike

+0

すべてのキーを処理したい場合は、これを行う最良の方法です。 cc @Liondancer – prayagupd

+0

私が探していたものは '.asInstanceOf [Map [String、String]'徹底的な答えをありがとう!とても有難い! – Liondancer

0
for (key <- myMap.keySet) myFunc(myMap(key)) 
+0

エラー:タイプが一致しません。 found: 'Any' 必須:' Map [_、_] ' – jwvh

関連する問題