Flash 如何将AS3案例陈述组织成一行?

Flash 如何将AS3案例陈述组织成一行?,flash,actionscript-3,switch-statement,case,Flash,Actionscript 3,Switch Statement,Case,嗨,我希望找出正确的语法是什么,以便更好地组织FlashAS3中的Case语句。例如,下面不是3个case语句,我能把它组织成1个吗 switch (refID) { case "TS_38": pgBool = true; break; case "TS_37": pgBool = true; break; case "TS_36": pgBool = true; brea

嗨,我希望找出正确的语法是什么,以便更好地组织FlashAS3中的Case语句。例如,下面不是3个case语句,我能把它组织成1个吗

switch (refID) 
{
    case "TS_38":
        pgBool = true;
        break;
    case "TS_37":
        pgBool = true;
        break;
    case "TS_36":
        pgBool = true;
        break;
    default:
        pgBool = false;
        //break;
}
我试过这个,但在我的测试中不起作用:

switch (refID) 
{
    case "TS_38", "TS_37", "TS_36":
        pgBool = true;
        break;
    default:
        pgBool = false;
        //break;
}
您可以这样做:

switch (refID) 
{
    case "TS_38":
    case "TS_21":
    case "TS_21":
        pgBool = true;
        break;
    default:
        pgBool = false;
        //break;
}
您可以这样做:

switch (refID) 
{
    case "TS_38":
    case "TS_21":
    case "TS_21":
        pgBool = true;
        break;
    default:
        pgBool = false;
        //break;
}
试试这个:

 switch (refID) 
{
case "TS_38":
case "TS_21":
case "TS_21":
    pgBool = true;
    break;

default:
    pgBool = false;
    //break;
}试试这个:

 switch (refID) 
{
case "TS_38":
case "TS_21":
case "TS_21":
    pgBool = true;
    break;

default:
    pgBool = false;
    //break;

}您也可以使用if语句而不是switch,然后可以使用&&和| |运算符:

if (refID == "TS_38" || refID == "TS_21" || refID == "TS_21") {
    pgBool = true;
} else {
    pgBool = false;
}

我忍不住注意到……您的两个案例是相同的。

您也可以使用if语句而不是switch,然后可以使用&&和| |运算符:

if (refID == "TS_38" || refID == "TS_21" || refID == "TS_21") {
    pgBool = true;
} else {
    pgBool = false;
}

我忍不住注意到……您的两个案例是相同的。

在本例中,请考虑不使用switch case。Switch case不是编写代码的最短方法,它经常提示您编写冗余代码(您的示例是“坏代码的好示例”)

您的代码可以这样编写:

pgBool = ["TS_38", "TS_21"].indexOf(refID) > -1;

(如果要多次调用此函数,您肯定希望重用数组/对象)


我已经看到这个答案被否决了好几次,我觉得它需要更深入的解释

首先,为什么使用哈希表比切换大小写更可取

  • 它是可伸缩的。如果将哈希表存储在必须做出决策的函数之外,则无需更改做出决策的函数,只需在表中添加或删除一个键,这将更加灵活,并允许编写更可读的代码。它还允许运行时修改,这在开关情况下是不可能的

  • 之所以称为哈希表,是因为它对键进行哈希处理,确保表中存储的值的访问时间是恒定的(通常非常小)。同时,switch case in在AS3中编码为一个简单的if-else子句链,这意味着switch case越长,函数验证每个条件所需的时间就越长。虽然switch case可以让您对测试条件的顺序进行一定的控制,但您很少能事先知道哪种情况会更频繁地触发。哈希表将平等对待所有条件


  • 这意味着,在实践中,永远没有理由选择开关大小写而不是哈希表。由于同样的原因,有些语言,例如Python,甚至没有这种结构。

    考虑在本例中不使用switch-case。Switch case不是编写代码的最短方法,它经常提示您编写冗余代码(您的示例是“坏代码的好示例”)

    您的代码可以这样编写:

    pgBool = ["TS_38", "TS_21"].indexOf(refID) > -1;
    

    (如果要多次调用此函数,您肯定希望重用数组/对象)


    我已经看到这个答案被否决了好几次,我觉得它需要更深入的解释

    首先,为什么使用哈希表比切换大小写更可取

  • 它是可伸缩的。如果将哈希表存储在必须做出决策的函数之外,则无需更改做出决策的函数,只需在表中添加或删除一个键,这将更加灵活,并允许编写更可读的代码。它还允许运行时修改,这在开关情况下是不可能的

  • 之所以称为哈希表,是因为它对键进行哈希处理,确保表中存储的值的访问时间是恒定的(通常非常小)。同时,switch case in在AS3中编码为一个简单的if-else子句链,这意味着switch case越长,函数验证每个条件所需的时间就越长。虽然switch case可以让您对测试条件的顺序进行一定的控制,但您很少能事先知道哪种情况会更频繁地触发。哈希表将平等对待所有条件


  • 这意味着,在实践中,永远没有理由选择开关大小写而不是哈希表。有些语言,如Python,出于同样的原因,甚至没有这种结构。

    不知道您可能会遇到其他情况,但通过您给出的示例,您可以完全删除switch语句:

    if(refId.split("_")[0] == "TS"){
        pgBool = true;
    }
    else{
        pgBool = false;
    }
    

    不知道您可能会遇到什么其他情况,但通过您给出的示例,您可以完全删除switch语句,方法是:

    if(refId.split("_")[0] == "TS"){
        pgBool = true;
    }
    else{
        pgBool = false;
    }
    

    哦,那是偶然的,呵呵,我有30个在里面,而且正在快速移除它们…哦,那是偶然的,呵呵,我有30个在里面,并且正在快速移除它们…哦,太酷了!好的,所以基本上是布尔检查它是否匹配,然后它将=0或1,嗯?听起来很有趣,我从未使用过这种技术。我将来会尝试一下,但据我所知,数组的indexOf方法非常慢,这很酷!好的,所以基本上是布尔检查它是否匹配,然后它将=0或1,嗯?听起来很有趣,我从未使用过这种技术。我将来会尝试一下,但据我所知,数组的indexOf方法相当慢!我完全可以用这个做其他的事情,但是对于这个项目,我们所有的id都是从TS开始的:(谢谢!我完全可以用这个做其他的事情,但是对于这个项目,我们所有的id都是从TS开始的:(