我需要测试字符串数组中的所有值是否仅为"0“或"1”,并尝试了以下代码,但没有成功:
bool isBool = Array.TrueForAll(str, val => val.Trim() == "0" || val.Trim() == "1");
和
bool isBool = str.All(val => val.Trim() == "0" || val.Trim() == "1");
因为我使用了||条件,所以有没有不同的方法?
发布于 2019-02-22 04:14:24
您可以尝试任何()并在第一个失败条件!str.Any(x => x.Trim() != "0" && x.Trim() != "1")
中返回
发布于 2019-02-22 04:26:09
我假设你的意思是这些值必须全是1还是0?在这种情况下,您需要分别测试每个案例。当数组只包含0或1时,你现有的代码是真的。但是,如果其中任何一个值是2,它就是假的。一种解决方案:
var allAreZero = new string[] { " 0 ", " 0", " 0" };
var allAreOne = new string[] { " 1 ", "1", " 1" };
var mixedOnesAndZeros = new string[] { " 1 ", "0", " 1" };
private bool ArrayIsExclusivelyTrueOrFalse(string[] data)
{
return data.All(i => int.TryParse(i, out int value) && value == 0) ||
data.All(i => int.TryParse(i, out int value) && value == 1);
}
ArrayIsExclusivelyTrueOrFalse(allAreZero); // true
ArrayIsExclusivelyTrueOrFalse(allAreOne); // true
ArrayIsExclusivelyTrueOrFalse(mixedOnesAndZeros); // false
发布于 2019-02-22 06:11:27
如果您想确保数组中的所有值都是"0"
或"1"
(但不是"0"
和"1"
的混合,就像我最初读到的那样),那么一种方法是确保Distinct
项的数量(修剪后)的Count
为1
(意味着它们都是相同的),并且该项是有效值集的成员(在下面的代码中,我们只检查第一项,因为我们已经知道它们在这一点上都是相同的)。
例如:
var validValues = new[] {"0", "1"};
var isBool = str.Select(i => i.Trim()).Distinct().Count() == 1 &&
validValues.Contains(str[0].Trim());
https://stackoverflow.com/questions/54815365
复制相似问题