标签: case-statement

case/switch语句的Python等价物是什么?

我想知道,是否有一个Python等效的case语句,如VB.net或C#上提供的示例?

python case-statement switch-statement

402
推荐指数
2
解决办法
115万
查看次数

Ruby类类型和case语句

有什么区别

case item.class
when MyClass
  # do something here
when Array
  # do something different here
when String
  # do a third thing
end
Run Code Online (Sandbox Code Playgroud)

case item.class
when MyClass.class
  # do something here
when Array.class
  # do something different here
when String.class
  # do a third thing
end
Run Code Online (Sandbox Code Playgroud)

出于某种原因,这些中的第一个有时会起作用而第二个起作用,而其他时候,第二个起作用,而第一个起作用.为什么?哪一个是"正确"的方式呢?

ruby duck-typing case-statement

127
推荐指数
4
解决办法
4万
查看次数

如何在bash脚本中的case语句中使用模式?

man页面说该case语句使用"文件名扩展模式匹配".
我通常想要一些参数的短名称,所以我去:

case $1 in
    req|reqs|requirements) TASK="Functional Requirements";;
    met|meet|meetings) TASK="Meetings with the client";;
esac

logTimeSpentIn "$TASK"
Run Code Online (Sandbox Code Playgroud)

我尝试过类似req*或者me{e,}t我理解的模式可以正确扩展以匹配文件名扩展上下文中的值,但它不起作用.

bash case-statement

70
推荐指数
3
解决办法
9万
查看次数

T-SQL条件WHERE子句

在这里找到了几个类似的问题,但无法弄清楚如何应用于我的场景.

我的函数有一个名为@IncludeBelow的参数.值为0或1(BIT).

我有这个问题:

SELECT p.*
FROM Locations l
INNER JOIN Posts p
on l.LocationId = p.LocationId
WHERE l.Condition1 = @Value1
AND   l.SomeOtherCondition = @SomeOtherValue
Run Code Online (Sandbox Code Playgroud)

如果@IncludeBelow为0,我需要查询为:

SELECT p.*
FROM Locations l
INNER JOIN Posts p
on l.LocationId = p.LocationId
WHERE l.Condition1 = @Value1
AND   l.SomeOtherCondition = @SomeOtherValue
AND   p.LocationType = @LocationType -- additional filter to only include level.
Run Code Online (Sandbox Code Playgroud)

如果@IncludeBelow为1,则需要排除最后一行.(即不要应用过滤器).

我猜它需要是一个CASE声明,但无法弄清楚语法.

这是我尝试过的:

SELECT p.*
FROM Locations l
INNER JOIN Posts p
on l.LocationId = p.LocationId
WHERE l.Condition1 = …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server case-statement where-clause

28
推荐指数
2
解决办法
4万
查看次数

为什么CharInSet比Case语句更快?

我很困惑.在CodeRage今天,Marco Cantu说CharInSet很慢,我应该尝试使用Case语句.我在我的解析器中这样做,然后用AQTime检查加速是什么.我发现Case语句要慢得多.

执行的4,894,539次:

而不是CharInSet(P ^,['',#10,#13,#0])做inc(P);

时间为0.25秒.

但执行次数相同:

而确实是     ',#10,#13,#0的
  案例P ^
:break;
    else inc(P);
  结束;

"while True"需要0.16秒,第一种情况需要0.80秒,else情况需要0.13秒,总计1.09秒,或者超过4倍.

CharInSet语句的汇编代码是:

添加edi,$ 02
mov edx,$ 0064b290
movzx eax,[edi]
调用CharInSet
测试a1,a1
jz $ 00649f18(返回add语句)

而案例逻辑就是这样:

movzx eax,[edi]
sub ax,$ 01
jb $ 00649ef0
sub ax,$ 09
jz $ 00649ef0
sub ax,$ 03
jz $ 00649ef0
add edi,$ 02
jmp $ 00649ed6(返回movzx声明)

案例逻辑在我看来是使用非常有效的汇编程序,而CharInSet语句实际上必须调用CharInSet函数,该函数在SysUtils中并且也很简单,是:

function CharInSet(C:AnsiChar; const CharSet:TSysCharSet):Boolean;
begin
结果:= CharSet中的C;
结束;

我认为这样做的唯一原因是因为在Delphi 2009中不再允许['',#10,#13,#0]中的P ^,因此调用会转换类型以允许它.

尽管如此,我对此感到非常惊讶,仍然不相信我的结果.

AQTime是否测量错误,我在这个比较中遗漏了什么,或者CharInSet真的是一个值得使用的有效函数吗?


结论:

我想你明白了,巴里.感谢您抽出宝贵时间做详细示例.我在我的机器上测试了你的代码,得到了.171,.066和.052秒(我猜我的桌面比你的笔记本快一点).

在AQTime中测试该代码,它给出:三次测试的0.79,1.57和1.46秒.在那里,您可以看到仪器的大量开销.但令我惊讶的是,这种开销将明显的"最佳"结果改为CharInSet函数,这实际上是最差的.

所以Marcu是正确的,CharInSet更慢.但是你无意中(或者可能是故意的)通过在Set方法中提取CharInSet用AnsiChar(P ^)做的事情给了我一个更好的方法.除了比case方法更小的速度优势,它也比使用案例更少的代码和更容易理解.

您还让我意识到使用AQTime(以及其他仪器分析器)进行错误优化的可能性.知道这一点将有助于我决定使用Delphi的Profiler和内存分析工具,这也是我的问题的另一个答案AQTime如何做到这一点? …

delphi delphi-2009 case-statement

18
推荐指数
2
解决办法
9628
查看次数

Ruby/Rails将数组传递给case

这是场景:

case code
  when 'www', '', nil
    false
  when 'code1', 'code2'... 'code_n' # The array STORE_CODES contains all the codes 
    true
  else
    false
end
Run Code Online (Sandbox Code Playgroud)

我怎样才能STORE_CODES直接使用when而不是'code1', 'code2'... 'code_n'

ruby case-statement

17
推荐指数
1
解决办法
6218
查看次数

VB.NET堆栈像Switch C#/ Java一样选择Case语句

似乎如果我将案例堆叠在一起它们不能像一个一样工作.既然VB.NET案例不需要使用Exit Select/ Return,那么每次在它下面检测到新的Case时它似乎会自动放入?

Dim Test as Integer = 12

Select Case Test
  Case 11
  Case 12
  Case 13
    MsgBox.Show("Could be 11 or 12 or 13?")
End Select
Run Code Online (Sandbox Code Playgroud)

它似乎只工作13件作品..

Gotta always remember this rule that you can't stack Cases like this from now on
移植应用程序时要记住它并不容易

vb.net case-statement switch-statement

15
推荐指数
1
解决办法
7610
查看次数

案例陈述与编码if陈述

什么更有效 - 使用sql中的case语句处理或使用代码中的if语句处理相同的数据.我问,因为我的同事有一个包含许多案例陈述的巨大查询.我建议她通过编写案例陈述来减轻数据库的压力.我发现它更有效......但为什么呢?

sql case-statement asp-classic

14
推荐指数
2
解决办法
3万
查看次数

是否可以在SSIS表达式中执行"LIKE"语句?

我正在使用派生列任务使用CASE WHEN语句更改列数据.但是,我需要能够说..

SQL代码将是:

CASE WHEN Column01 LIKE '%i%' THEN '0' ELSE '1' END
Run Code Online (Sandbox Code Playgroud)


在SSIS表达语言中将是:

[Column01] == "i" ? "0" : "1"  (that's for equals i, not, LIKE %i%.
Run Code Online (Sandbox Code Playgroud)


是否可以使用LIKE运算符?

sql ssis dataflowtask case-statement sql-like

14
推荐指数
2
解决办法
3万
查看次数

SQL Case语句可以通过吗?

有没有办法在SQL中使CASE语句像C#中的case语句一样?我不想做的是下面的例子,但如果那是我唯一的选择,我想我会选择它.

例:

@NewValue =
   CASE
      WHEN @MyValue = '1' THEN CAST(@MyValue AS int)
      WHEN @MyValue = '2' THEN CAST(@MyValue AS int)
      ELSE NULL
   END
Run Code Online (Sandbox Code Playgroud)

编辑:

我正在使用SQL Server.

sql-server case-statement

11
推荐指数
2
解决办法
6241
查看次数