【问题标题】:I want to convert this switch part of code in single line using ternary operators我想使用三元运算符将此开关部分代码转换为单行
【发布时间】:2026-01-25 12:30:01
【问题描述】:
for(int i=0; i<num.length; i++){
    switch(num[i]/10){
        case 10:
        case 9:
            aCount++;
            break;
        case 8:
            bCount++;
            break;
        case 7:
            cCount++;
            break;
        case 6:
            dCount++;
            break;
        default: fCount++;
    }

我想在单行中使用多个三元运算符而不是 switch 语句来缩短这段代码。有可能吗?

【问题讨论】:

  • 真的很丑,但是有可能
  • 是的,这是可能的。当您第一次需要对其进行更改时,您会讨厌自己,而与您一起工作的其他人会要求与除您之外的任何人一起工作,因为没有编写它的人几乎不可能理解它,但是如果你愿意承受这些后果,你可以做你所要求的。就个人而言,如果你在我的团队工作并且我参与了你的代码审查,我会拒绝多三元版本,因为它无法维护,并让你改回来。

标签: switch-statement conditional-statements shortcode conditional-operator short


【解决方案1】:

不容易,不。首先,您还没有指定语言,可能在 C++ 中通过使用引用,或在 C 中通过使用指针。但是,即使它可能的,你也很可能最终得到真正的代码。

如果您只是想提高可读性(在我看来,这通常是缩短代码的原因), 可以在不改变代码结构的情况下做到这一点,例如(假设这些是标记0..100 和等级a..f):

for (int i = 0; i < num.length; i++) {
    // Map <60 to f, 6x to d, 7x to c, 8x to b, 90+ to a.

    switch (num[i] / 10) {
        case 10: case 9: aCount++; break;
        case 8:          bCount++; break;
        case 7:          cCount++; break;
        case 6:          dCount++; break;
        default:         fCount++;
    }
}

【讨论】: