如何检查数组中的每个元素是否只包含一种类型的字符



例如:

{1, 1, 11, 1111, 1111111} 此数组有效,因为每个元素仅使用数字 1。

{11, 101, 1111, 11111}此数组无效,因为每个元素都使用 0 和 1 位数字。

你可以尝试这样的事情:

var isValid = arr
    .Select(a => a.ToString()) //Call .ToString() on each integer
    .SelectMany(a => a)        //Select each character in the string and flatten
    .Distinct()                //Get only the unique characters
    .Count() <= 1;             //If there are more than 1 unique characters, it's invalid.

试试这个:

var allSame = source.SelectMany(n => n.ToString()).Distinct().Count() == 1;

这将为您的两个输入提供正确的结果。

解决方案 1

无效= {111,

222, 333}, {111, 110, 101}.有效 = {111, 111}, {222, 222}

char c = arr[0].ToString()[0]; //get the first digit to compare
//char c = arr.First().ToString().First()
bool isValid = arr
     .SelectMany(i => i.ToString()) //select all digits as chars
     .All(s => s == c); //compare them to the c char

仅使用 LINQ(性能不佳)

bool isValid = arr
     .SelectMany(i => i.ToString()) //select all digits as chars
     .All(s => s == arr.First().ToString().First()); //compare them to the c char

第二个示例将为Array的每个数字创建一个IEnumerable<Char>(性能不佳)

解决方案 2

无效= {111, 110, 101}。有效 = {111, 111}, {222, 222}, {111, 222, 333}

bool isValid = arr
     .SelectMany(i => i.ToString())
     .Distinct()
     .Count() == 1

最新更新