Если у вас есть строка "1,2,3,1,5,7", вы можете поместить ее в массив или хеш-таблицу или что-то, что считается лучшим.
Как вы определяете, что все значения одинаковы? В приведенном выше примере это потерпит неудачу, но если бы у вас было "1,1,1", это было бы верно.
Это можно сделать красиво, используя лямбда-выражения.
Для массива с именем arr
:
var allSame = Array.TrueForAll(arr, x => x == arr[0]);
Для списка (List<T>
), названного lst
:
var allSame = lst.TrueForAll(x => x == lst[0]);
И для итерабельного (IEnumerable<T>
), названного col
:
var first = col.First();
var allSame = col.All(x => x == first);
Обратите внимание, что эти методы не обрабатывают пустые массивы/списки/iterables. Однако такая поддержка была бы тривиальной.
Итерируйте через каждое значение, сохраните первое значение в переменной и сравните оставшуюся часть массива с этой переменной. В тот момент, когда один из них терпит неудачу, вы знаете, что все значения не совпадают.
Как насчет чего-то вроде...
string numArray = "1,1,1,1,1";
return numArrray.Split( ',' ).Distinct().Count() <= 1;
Я думаю, что использование List<T>.TrueForAll
было бы неплохим подходом.
Не так эффективен, как простой цикл (поскольку он всегда обрабатывает все элементы, даже если результат может быть определен раньше), но:
if (new HashSet<string>(numbers.Split(',')).Count == 1) ...