「最高の人」が「最も効率的」を意味する場合は、先にお読みください。
本当にたくさんある場合は、次の方法を使用することをお勧めします。スイッチで
文字列は何かが(Project Coinの一部として)は、Java 7になります実際にある
そしてproposalによると、これは、Java言語がそれを実装する方法です。
まず、各文字列のハッシュ値を計算する。この問題は、現在のほとんどの言語で利用可能な「スイッチint」の問題であり、効率的です。 case文のそれぞれで、これが実際に文字列かどうかを確認します(まれに、異なる文字列が同じintにハッシュする可能性があります)。
私は個人的には、特定のプログラムがある状況、つまり可能な文字列がプログラマーの制御下にあるかどうか、プログラムがどれほど堅牢である必要があるかによって、実際には最後のステップを実行しないことがあります。
サンプル擬似コードに対応the fore-mentioned proposalから
String s = ...
switch(s) {
case "quux":
processQuux(s);
// fall-through
case "foo":
case "bar":
processFooOrBar(s);
break;
case "baz":
processBaz(s);
// fall-through
default:
processDefault(s);
break;
}
はあなたが理解するのに役立ちます。
// Advanced example
{ // new scope for synthetic variables
boolean $take_default = false;
boolean $fallthrough = false;
$default_label: {
switch(s.hashCode()) { // cause NPE if s is null
case 3482567: // "quux".hashCode()
if (!s.equals("quux")) {
$take_default = true;
break $default_label;
}
processQuux(s);
$fallthrough = true;
case 101574: // "foo".hashCode()
if (!$fallthrough && !s.equals("foo")) {
$take_default = true;
break $default_label;
}
$fallthrough = true;
case 97299: // "bar".hashCode()
if (!$fallthrough && !s.equals("bar")) {
$take_default = true;
break $default_label;
}
processFooOrBar(s);
break;
case 97307: // "baz".hashCode()
if (!s.equals("baz")) {
$take_default = true;
break $default_label;
}
processBaz(s);
$fallthrough = true;
default:
$take_default = true;
break $default_label;
}
}
if($take_default)
processDefault(s);
}
ええ、文字列のマップを使用するだけで機能します。 – Ben
@Benあなたは答えとして例を投稿できますか? –