【问题标题】:check if value contains any of const numbers? C#检查 value 是否包含任何 const 数字? C#
【发布时间】:2017-10-25 02:11:23
【问题描述】:

我正在寻找的不是问题解决方案,而是更好的 c# 逻辑。

基本上,我有一个值,它是任何这些值 {1、2、4} 的总和。 然后我会根据这些值按降序执行一些操作。
检查下面的代码:

        byte value = 7;//could be 1,2,3,4,5,6,7 which is the summation of any of those 3 numbers {1, 2, 4}
        bool case1 = false, case2 = false, case3 = false;
        if (value >= 4)
        {
            case1 = true;
            value -= 4;
        }
        if (value >= 3)
        {
            case2 = true;
            value -= 3;
        }
        if (value >= 1)
        {
            case3 = true;
            value -= 1;
        }
        if (case3)
        {
            //do some action
        }
        if (case2)
        {
            //do some action
        }
        if (case1)
        {
            //do some action
        }

请注意:求和中不会重复任何数字。
这就是我用c#写的,但这并没有让我对2k17中的代码逻辑感觉良好。

希望有人对任何数学运算都有更好的逻辑!
提前致谢。

【问题讨论】:

  • 我认为您使用的词 summation 不正确。就目前而言,您的问题尚不清楚,我们无法帮助您解决。

标签: c# .net c#-4.0


【解决方案1】:

(再次编辑...代码示例) 不使用 int,可以使用 enum 吗?

public enum MyEnum
{
    Nothing = 0,
    One = 1,
    Two = 2,
    Four = 4,
    Seven = 7
}
MyEnum seven = MyEnum.Seven;

if( (seven & MyEnum.Four) == MyEnum.Four)
{
Console.WriteLine("Four");
}


if((seven & MyEnum.Two) == MyEnum.Two)
{
Console.WriteLine("Two");
}

if((seven & MyEnum.One) == MyEnum.One)
{
Console.WriteLine("One");
}

上一个技巧:位掩码,这里是易于理解的示例http://www.alanzucconi.com/2015/07/26/enum-flags-and-bitwise-operators/

【讨论】:

  • 这正是我一直在寻找的,因为我从未在 c# 中使用过位掩码,但我不知道如何完成。非常感谢。
【解决方案2】:

我认为您的原始代码是错误的,第二个 if 应该是 if (value >= 2) 而不是 if (value >= 3),但这不是重点。如果我了解您想要实现的目标,那么这个控制台应用程序应该会有所帮助:

class Program
{
    static void Main(string[] args)
    {
        int value = 7;

        int copy = value; // only needed for the Console.WriteLine below

        var allComponents = new[] { 4, 2, 1 };

        var sumParts = new List<int>();
        int i = 0;

        while (i < allComponents.Length)
        {
            if (value >= allComponents[i])
            {
                value -= allComponents[i];
                sumParts.Add(allComponents[i]); // or do some action whatever you need
            }
            i++;
        }

        Console.WriteLine("Value {0} is the sum of {1}", copy, string.Join(" + ", sumParts));
    }
}

可能值的输出(7、6、5、4、3、2、1):

Value 7 is the sum of 4 + 2 + 1
Value 6 is the sum of 4 + 2
Value 5 is the sum of 4 + 1
Value 4 is the sum of 4
Value 3 is the sum of 2 + 1
Value 2 is the sum of 2
Value 1 is the sum of 1

它从最大到最小(4、2、1)循环遍历所有组件,检查当前组件是否大于或等于value,如果是,则将value减去当前组件并添加sumParts 列表中的当前组件。

如果您可以从循环中的 if 内部调用您的逻辑,那么您甚至不需要 sumParts,只需在那里做任何您需要的事情。

此解决方案与您的解决方案基本相同,但滚动到一个循环而不是一个接一个的语句。

【讨论】:

  • 与我的代码几乎相同,但您只是将逻辑更改为循环,我这样写是为了便于理解。问题是它仍然检查值 4 是否存在于第一阶段,但我必须首先检查最小值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-25
  • 2021-06-12
  • 2015-02-07
  • 2020-03-17
  • 1970-01-01
  • 2013-11-12
  • 2015-02-28
相关资源
最近更新 更多