2016-03-30 4 views
2

スカラで定数マッピングを宣言し、それを行う適切な方法を宣言する必要があります。 のJavaの方法は、Scalaでスカラスタイル:定数マップとパターンマッチング

def array(i: Int) = i match { 
    case 0 => "zero" 
    case 1 => "one" 
    case 2 => "two" 
} 

であることを行う別の方法は、Scalaでそれを行うには、標準/推奨方法はあり

private static final String[] numbers = {"zero","one","two","three"} //Java 
val numbers = Array("zero","one","two","three") //Scala 
val numbers = collection.immutable.HashMap(0 -> "zero", 1 -> "one", 2 => "two") //Scala maps 

のですか?

答えて

1

それは目的によって異なります。

List("zero", "one", "two", "three").zipWithIndex.map(_.swap).toMap 

私は両方のアプローチは、文脈に応じて使用を見てきました(まだマップは、インデックスを使用することができると仮定すると、):ここで鍵を生成したバージョンです。

マッピングをシリアル化するか、それを渡すか、別のバージョンを保持する必要がある場合は、マップを使用する方がよいでしょう。

それ以外の場合は、パターンマッチングが優れている可能性があります。

+0

あなたのコードはマップを逆に作成します(String-> Int)。 OPはInt-> Stringを必要とします。 –

+0

@TheArchetypalPaulあなたが正しいです、私はそれを逃した。私はそれを修正するコードを更新しました。 –

2

マップには、プレーンな機能にはない機能があります。たとえば、既存のキーと値を列挙/スキャン/トラバース/フィルタリングすることができます。 Map/reduce/transformなど(他の答えが示唆しているにもかかわらず、デフォルト値を持つか、欠落しているキーについてもエラーを生成することができます)。

もし必要ないのであれば、大きな違いはありません...エントリの数がかなり多い場合、一般にMapへのアクセスは静的パターンを評価するよりも速いでしょう。

関連する問題