0

キーと値のペアのマップがあり、キーを指定して値をフェッチしようとしていますが、値が返されますが、いくつかの値が付属していますが、どうすればそれを取り除くことができますか?私のコードは次のとおりです。

val jsonmap = simple.split(",\"").toList.map(x => x.split("\":")).map(x => Tuple2(x(0), x(1))).toMap
val text = jsonmap.get("text")

「text」がキーであり、それがマップされる値が必要な場合、現在、次の出力が得られます。

Some("4everevercom")    

Mapの代わりにflatMapを使用してみましたが、どちらも機能しません

4

4 に答える 4

5

あなたは方法を探していapplyます。SeqSetおよびMapさまざまなメソッドを実装しますapply。違いは、それぞれの主な違いです。

構文糖衣として、では.apply省略できるo.apply(x)ので、これを行う必要があります。

val text = jsonmap("text") // pass "key" to apply and receive "value"

の場合Seqapply独自の例で使用したように、インデックスを取得して値を返します。

x(0), x(1)

の場合Setapply値を取り、を返しますBoolean

于 2013-01-29T22:41:55.753 に答える
4

@Brianが述べたように、getOrElseを使用するか、「apply」メソッドを使用して、存在しない値を自分で処理できます。

val text: String = jsonmap("text")
// would trow java.util.NoSuchElementException, if no key presented

さらに、キーが見つからない場合にMapがフォールバックできるように、デフォルト値を設定できます。

val funkyMap = jsonmap.get("text").withDefaultValue("")
funkyMap("foo")
// if foo or any other key is not presented in map, "" will be returned

欠落しているすべてのキーのデフォルト値が必要な場合は、これを使用します。

于 2013-01-29T22:27:01.850 に答える
3

指定した値が1つある場合、またはデフォルト値がある場合getOrElseは、whichを使用して値を取得できます。Someキーがマップに存在する場合は、から値を取得しますSome。キーが存在しない場合は、指定された値を取得します。

scala> val map = Map(0 -> "foo")
map: scala.collection.immutable.Map[Int,String] = Map(0 -> foo)

scala> map.get(0)
res3: Option[String] = Some(foo)

scala> map.getOrElse(1, "bar")
res4: String = bar

また、ScalaのSome and Noneオプションに関する情報については、これを参照してください:http: //www.codecommit.com/blog/scala/the-option-pattern

于 2013-01-29T22:17:14.193 に答える
0

Option標準ライブラリにある他の同様の構造での作業に役立つ可能性のある追加のオプションを提供するだけです。

オプションを反復(マップ)することもできます。OptionIterableゼロまたは1つの要素を含んでいるため、これは機能します。

myMap.get(key) map { value =>
  // use value...
}

for同様に、コードがより明確になると思われる場合は、を使用できます。

for (value <- myMap.get(key)) {
  // use value...
}
于 2013-01-30T13:53:38.957 に答える