Как сравнить значения в массиве

2

Если у вас есть строка "1,2,3,1,5,7", вы можете поместить ее в массив или хеш-таблицу или что-то, что считается лучшим.

Как вы определяете, что все значения одинаковы? В приведенном выше примере это потерпит неудачу, но если бы у вас было "1,1,1", это было бы верно.

  • 3
    Где находится тег "Пожалуйста, сделайте мою домашнюю работу"?
  • 0
    Я думаю, что этот вопрос задавался раньше ...
Теги:
arrays
c#-2.0

5 ответов

8
Лучший ответ

Это можно сделать красиво, используя лямбда-выражения.

Для массива с именем 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. Однако такая поддержка была бы тривиальной.

  • 0
    Почти, но не обрабатывает пустые массивы ...
  • 0
    @ Мартин: В вопросе неясно, является ли это требованием или нет. Конечно, это было бы очень просто поддержать.
Показать ещё 2 комментария
6

Итерируйте через каждое значение, сохраните первое значение в переменной и сравните оставшуюся часть массива с этой переменной. В тот момент, когда один из них терпит неудачу, вы знаете, что все значения не совпадают.

  • 0
    Хороший, я почти вижу код!
5

Как насчет чего-то вроде...

string numArray = "1,1,1,1,1";
return numArrray.Split( ',' ).Distinct().Count() <= 1;
  • 0
    Linq не подходит для этого проекта, к сожалению
1

Я думаю, что использование List<T>.TrueForAll было бы неплохим подходом.

http://msdn.microsoft.com/en-us/library/kdxe4x4w.aspx

1

Не так эффективен, как простой цикл (поскольку он всегда обрабатывает все элементы, даже если результат может быть определен раньше), но:

if (new HashSet<string>(numbers.Split(',')).Count == 1) ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню