2016-12-14 1 views
0

スカラーでどのように同じ結果が得られますか?大文字と小文字を区別せずにマップスカラからキーを取得する方法

Map<String, Integer> lookup = 
    new TreeMap<String, Integer>(String.CASE_INSENSITIVE_ORDER); 

lookup.put("One", 1); 
lookup.put("tWo", 2); 
lookup.put("thrEE", 3); 

System.out.println(lookup.get("Two")); 
System.out.println(lookup.get("three")); 
+0

あなたはそれが元の値だとして、各キーを維持したいですか?その場合、小文字の 'val map = Map(" One ".toLowerCase - > 1、" tWo ".toLowerCase - > 2、...)'を挿入するだけです。 –

+0

これは私が探しているものではありません。上記のJavaコードでは、私は "TWO"または "TWO"を検索することができますが、まだ結果が来る。マップ内にさらに多くのキーの組み合わせを挿入しなくても、私のスカラコードが同じように動作するようにします。 –

+0

スカラから 'java.util.TreeMap'を使うことができますか? – rethab

答えて

7

それはそれはあなたがどのように把握することができないほど多くの「同じことを行うことができない」ということではありません。)

scala> scala.collection.immutable.SortedMap("foo" -> "bar")(Ordering.by(_.toLowerCase)).get("Foo") 
res10: Option[String] = Some(bar) 
+0

'Ordering.by(_。toLowerCase)'の代わりに 'String.CASE_INSENSITIVE_ORDER'を渡すことができるはずです。暗黙のうちにhttps://github.com/scala/scala/blob/v2.12.1/src/library/scala/math/Ordering.scala#L152 – Dylan

+0

はい、確かに...しかし、私はそれが欲しいと確信していません:) 'Ordering.by'は私にはもっとよく見えます – Dima

+0

' Ordering.by'ははるかに良く見えますが、この特定のケースでは正確には同等ではありません。たとえば、過去に私が噛まれたhttp://mattryall.net/blog/2009/02/the-infamous-turkish-locale-bug。 – Dylan

関連する問題