这个回答是关于Haxe的,而不是Java,因为它允许此操作,这要归功于模式匹配,并具有有趣的输出结果,这可能对您查找相应的开关很有用。数组可以根据固定长度进行匹配。
我创建了一个演示文稿,可以编译成Javascript和Flash。您可以在右列中看到js输出。
演示文稿:
http://try.haxe.org/#86314
class Test {
static function main(){
var array=[true,false,true];
var result=switch(array){
case [true,true,false]: "no";
case [true,false,true]: "yes";
default:"??";
}
#if js
new js.JQuery("body").html(result);
#elseif flash
trace(result);
#end
}
}
这是输出开关,它使用嵌套开关。如果您尝试更改情况,您会看到js-output如何更改以具有高效的开关。
(function () { "use strict";
var Test = function() { };
Test.main = function() {
var array = [true,false,true,false];
var result;
switch(array.length) {
case 4:
switch(array[0]) {
case true:
switch(array[1]) {
case false:
switch(array[2]) {
case true:
switch(array[3]) {
case false:
result = "no";
break;
default:
result = "??";
}
break;
default:
result = "??";
}
break;
default:
result = "??";
}
break;
case false:
switch(array[1]) {
case false:
switch(array[2]) {
case true:
switch(array[3]) {
case false:
result = "yes";
break;
default:
result = "??";
}
break;
default:
result = "??";
}
break;
default:
result = "??";
}
break;
}
break;
default:
result = "??";
}
new js.JQuery("body").html(result);
};
var js = {};
var q = window.jQuery;
js.JQuery = q;
Test.main();
})();
另一个有趣的模式是使用下划线。一个 _ 模式匹配任何内容,所以 case _: 等同于 default,这使您能够做到以下操作:
var myArray = [1, 6];
var match = switch(myArray) {
case [2, _]: "0";
case [_, 6]: "1";
case []: "2";
case [_, _, _]: "3";
case _: "4";
}
trace(match); // 1
http://haxe.org/manual/pattern_matching#array-matching