我正在浏览我的图书馆的一位朋友,因为他询问了优化问题,我遇到了一段代码,如下所示:
long digit = 0;
switch (word) {
case "zero":
digit = 0;
break;
case "a":
case "one":
digit = 1;
break;
case "two":
digit = 2;
break;
case "three":
digit = 3;
break;
case "four":
digit = 4;
break;
case "five":
digit = 5;
break;
case "six":
digit = 6;
break;
case "seven":
digit = 7;
break;
case "eight":
digit = 8;
break;
case "nine":
digit = 9;
break;
case "ten":
digit = 10;
break;
case "eleven":
digit = 11;
break;
case "twelve":
digit = 12;
break;
case "thirteen":
digit = 13;
break;
case "fourteen":
digit = 14;
break;
case "fifteen":
digit = 15;
break;
case "sixteen":
digit = 16;
break;
case "seventeen":
digit = 17;
break;
case "eighteen":
digit = 18;
break;
case "nineteen":
digit = 19;
break;
case "twenty":
digit = 20;
break;
case "thirty":
digit = 30;
break;
case "fourty":
digit = 40;
break;
case "fifty":
digit = 50;
break;
case "sixty":
digit = 60;
break;
case "seventy":
digit = 70;
break;
case "eighty":
digit = 80;
break;
case "ninety":
digit = 90;
break;
}
return digit;
Run Code Online (Sandbox Code Playgroud)
我在这里看到了一些关于交换机究竟如何工作的问题,但他们很方便地没有提到带字符串的情况.像上面那样的switch语句能否以任何方式进行优化?
Kon*_*lph 11
正如奥德德所说,你可以把它们放进去Dictionary
.但实际上,.NET编译器已经为您完成了这项工作:它构建了一个跳转表(通过a Dictionary<string, SomeDelegate>
),允许在O(1)中打开值.
也就是说,我实际上发现使用比这里Dictionary<string, int>
更可读switch
.
您可以将它们放入a Dictionary<string,int>
并返回int
字符串键.
var wordsToNumbers = new Dictionary<string,int>();
wordsToNumbers.Add("one", 1);
...
wordsToNumbers.Add("ninety", 90);
// elsewhere
return wordsToNumbers[word];
Run Code Online (Sandbox Code Playgroud)
注意:
正如其他人在评论中指出的那样 - 我们的想法是一次构建字典并重用它.一种方法是使用一个字段并在构造函数中填充它,然后在其他方法中使用它.
归档时间: |
|
查看次数: |
922 次 |
最近记录: |