【问题标题】:Converting multiple if-else logic to for loop [closed]将多个 if-else 逻辑转换为 for 循环
【发布时间】:2015-04-02 17:25:18
【问题描述】:

目前我的代码中有多个 if-else 循环,例如:

if (a > 2 && a < 4)
{
  // do something
}
else if (a > 4 && a < 6)
{
  // do something
}
else if (a > 6 && a < 8)
{
  // do something
}

... and so on.

有没有办法把它重新安排成一个更简单的 FOR 循环?或任何其他可以使代码更优化的循环?

【问题讨论】:

  • 我在这里看不到 for .. 循环,也许你的意思是switch
  • switch 不会缩短代码。您是否有任何其他方法建议我使代码更短且更优化,而不是使用多个(在我的情况下为 30 个)if-else 语句?
  • a > 2 && a
  • @KalelWade 如果 'a' 是双精度数或除整数以外的其他此类数字,则不正确。
  • 我匆忙做了差1,你可以假设大于1,比如a > 2 && a

标签: c# if-statement for-loop unity3d


【解决方案1】:
for (int i = 2; ; i += 2)
    {
        if (a > i && a < i + 2)
        {
            //Do your thing
            break;
        }
    }

【讨论】:

  • 但是 //do your thing 是我使用的每个 if-else 条件中的不同语句。在这里,无论 i (或 a) 的实际值是什么,这都是完全相同的。有办法解决吗?
  • @Daqs 你没有包括你的东西,如果你展示它,我们可能会发现一个模式!
  • @Daqs 此外,这听起来像是一个解决方案,您可能希望根据发生的操作使用一些多态性。
  • 唯一的模式就是你已经发现的差异。我想,这就是你能做的。我明白。谢谢。
【解决方案2】:

如果您想检查确切的值,可以使用switch。但是,由于您的条件是基于数学表达式的,因此您最好坚持现有的条件。它可能看起来很杂乱,但它可能已经是完成您想做的事情的最有效方式了。

【讨论】:

  • 你确定吗?我是编程新手,但这似乎未优化且效率低下?我看到了我的代码,我看到的只是 30 个 if-else 循环。您确定没有其他解决方法,因为我不能使用 switch (正如您所说,我没有做精确的值)。
  • 如果不知道更多关于你在做什么,很难建议如何优化它。如果您的条件中有可以简化的模式,那将有所帮助。或者您可以完全消除条件检查。我们需要更多信息。
  • 感谢您的回复。这就是我正在做的所有事情。没有别的了。我正在分批比较整数变量的值,就像上面的示例一样,每批比较都会产生不同的输出。你认为这可能有一个模式吗?被比较的值之间的差异是相同的。可以做些什么吗?例如(a>2) && (a 这里的差异是 4,这是每次比较中的差异。
  • 仍需要更多信息。 // do something 会发生什么?
  • 你是对的。我应该提到这一点。感谢您的帮助。
【解决方案3】:

如果我理解正确,您只需将值放入如下所示的数组中并动态调用方法,这就是您要找的吗?

var range = [3,5,7] //defined the range as >2 and <4 is equal to 3 and so on.

$.each(range, function(i, val){

  window[PerformActionByVal + val]();//call the specific function

});

function PerformActionByVal3()
{
}

function PerformActionByVal5()
{
}

【讨论】:

  • 我非常怀疑他想要一个 jQuery 解决方案
  • @Jonesy 我也对此表示怀疑,但是操作确实提到了这个在同时运行 C# 和 js 的统一上运行,因此解决方案可能是 jquery 的。只是说。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-15
  • 1970-01-01
  • 1970-01-01
  • 2021-10-11
  • 2012-07-11
相关资源
最近更新 更多