【问题标题】:C# class - Dynamic comparison of 1023 possible combinations of 10 boolean valuesC# 类 - 10 个布尔值的 1023 种可能组合的动态比较
【发布时间】:2020-04-22 06:38:03
【问题描述】:

我有一个包含 10 个布尔值的场景,可以同时拥有少至一个但多至 10 个真值。由于有 1023 种可能的组合,我正在寻找有关制作 C# 类的指导,我可以在我的程序中引用它来帮助我推动其余的逻辑。

目前我能做到这一点的唯一方法是:

  • 十进制值1(即二进制0000000001)表示只有bool 1为真
  • 十进制值 15(即二进制 0000001111)表示布尔值 1、2、3 和 4 为真
  • 十进制值 329 (0101001001) 表示布尔值,1、4、7 和 9 为真
  • 等等,等等,直到 1023(二进制 1111111111)的所有十进制值,即所有布尔值都是 true。

我确信有一种动态方法可以做到这一点,而不是为每个可能的组合状态使用 1023 个 if 语句,但我很难想出最好的方法来开始。

我必须使用的编程环境是沙盒的“类 c”过程语言,这使得创建一个 C# 类在我的主程序之外完成繁重的工作并简单地在主程序中引用该类变得更加简洁.我根本不是一个强大的 C# 程序员,非常感谢任何帮助!如果我的问题不是很直接,我很乐意澄清任何需要的东西。

【问题讨论】:

  • 在您的问题中,您没有说出您要做什么。 “我确信有一种动态的方式来做到这一点”——什么是“this”?
  • 这不是直接简单的 - 你想对比较结果做什么,你实际上有 1023 条完全不同的逻辑需要被解雇吗?你能给我们看一个最小的例子吗,例如哪里有 3 个布尔值?
  • 让我澄清一下:您想从控制台输入一个十进制数,然后根据该数字设置布尔变量的值?
  • 对于最初的含糊之处深表歉意,我能够毫无问题地从二进制值解析我的 10 个布尔值。
  • 澄清:基于 1 个或多个布尔值同时为真的状态,我想说例如“如果布尔值 1、2 和 7 为真,则 x 是状态” , 没有积累一个大小荒谬的真值表

标签: c# binary


【解决方案1】:

您可以拥有一个布尔数组,其中最小索引对应于二进制数中权重最小的数字,而不是 10 个布尔值。例如,如果数字是 329(二进制 0101001001),您的数组如下所示:

booleans[0] = True;
booleans[1] = False;
booleans[2] = False;
booleans[3] = True;
booleans[4] = False;
booleans[5] = False;
booleans[6] = True;
booleans[7] = False;
booleans[8] = True;
booleans[9] = False;

您可以编写一个返回布尔数组的函数/方法,以 int [0, 1023] 作为参数:

static bool[] intToBooleans10(int num)
{
    bool[] booleans = new bool[10];

    string binaryString;
    if (num < 1024 && num >= 0) 
        binaryString = Convert.ToString(num, 2); // converts to binary format
    else 
        return booleans; // returns all false

    for (int i = 9; i >= 0; i--)
    {
        if (binaryString[i] == '1')
            booleans[9 - i] = true;
        else
            booleans[9 - i] = false;
    }

    return booleans;
}   

当然,这只是一个 hardcoded 示例,假设您只需要正好 10 个布尔值。

【讨论】:

    猜你喜欢
    • 2016-05-05
    • 1970-01-01
    • 1970-01-01
    • 2012-10-26
    • 2015-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多