C#, одинаковые элементы в массиве

Всем привет. Допустим, есть булевый массив [true, true, true, true, true]. Видно, что массив полностью состоит из одинаковых элементов. Так вот у меня вопрос: есть ли какой-то метод, который возвращает true если массив состоит из одинаковых элементов или false в противном случае?


Ответы (3 шт):

Автор решения: slippyk
using System.Linq;    

int[] a = { 1, 1, 1, 1, 1 };
int[] b = { 1, 1, 1, 2, 1 };

Console.WriteLine(a.Skip(1).All(item => item == a[0])); // True
Console.WriteLine(b.Skip(1).All(item => item == b[0])); // False
→ Ссылка
Автор решения: srvr4vr

Вариант @slippyk норм, но выглядит чутка костыльно с этими скипами. Предлагаю:

Console.WriteLine(a.Distinct().Count() == 1);
Console.WriteLine(b.Distinct().Count() == 1);

А если еще расширение написать

public static class ArrayExtension
{
    public static bool IsHomogeneously<T>(this IEnumerable<T> source)
        => source.Distinct().Count() == 1;

}

То вообще красота:

Console.WriteLine(a.IsHomogeneously());
Console.WriteLine(b.IsHomogeneously());

Единственный минус на ссылочных типах без нормально реализованного IEquatable - не заработает. Впрочем, решение slippyk - подвержено тому же недугу.

→ Ссылка
Автор решения: demonplus
using System.Linq;    

int[] a = { 1, 1, 1, 1, 1 };
int[] b = { 1, 1, 1, 2, 1 };

Можно получить количество различных элементов в массиве и проверить, что оно равно единице.

bool isAllEqual = a.Distinct().Count() == 1; // true для a

isAllEqual = b.Distinct().Count() == 1; // false для b (потому что 2)
→ Ссылка