要查找的数组值为true或false

时间:2017-05-03 12:20:50

标签: c# arrays

已创建简化的查找表,

对于数组样本(查找表),我希望该值为true或false。用户将输入响应数组。然后程序将数组与样本进行比较以获得序列相等性。关于我如何做到这一点的任何想法。

//Note code has been simplified

// Array for look up
bool [] firstArray = new bool []{true,false| true};


//....................


//array for response
bool [] sampl = new bool[] {true,false};

if(sample.SequenceEqual(sampl))
{
  Console.WriteLine("There are equal");

//Output should be true
}

2 个答案:

答案 0 :(得分:0)

有很多方法可以做到这一点。一种方法是遍历两个数组并对每个数组的值进行投影。下面的代码将贯穿两个数组并通过比较数组中每个索引处的项的值来存储bool

var zipped = firstArray.Zip(sampl, (a, b) => (a == b));

现在我们可以检查是否有不同的项目。

var hasDiiff = zipped.Any(x=> x == false);

请注意,如果您的阵列长度不同,Zip将在第一个阵列结束时停止。

如果你愿意,你可以在一行中完成整个事情:

var hasDiff = first array.Zip(sampl, (a, b) => (a == b))
       .Any(x=> x == false);

请参阅我的回答here,深入解释Zip的工作原理。

答案 1 :(得分:0)

false| true的值为true,因此您对firstArray的定义实际上与此相当:

bool [] firstArray = new bool []{true, true};

您需要做的是创建一组您匹配的规则:

Func<bool, bool>[] rules = new Func<bool, bool>[] { x => x == true, x => true };

然后你可以这样做:

bool[] sampl = new bool[] { true, false };

if (rules.Zip(sampl, (r, s) => r(s)).All(x => x))
{
    Console.WriteLine("There are equal");

    //Output should be true
}

如果您希望它更容易阅读,您可以这样做:

Func<bool, bool> trueOnly = x => x == true;
Func<bool, bool> falseOnly = x => x == false;
Func<bool, bool> trueOrFalse = x => true;

Func<bool, bool>[] rules = new Func<bool, bool>[] { trueOnly, trueOrFalse };