2009-07-06 6 views
2

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

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

+3

Где «Пожалуйста, мое домашнее задание» тег? – Sergio

+0

Я думаю, этот вопрос задан раньше ... –

ответ

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); 

Обратите внимание, что эти методы не обрабатывают пустые массивы/lists/iterables. Однако такая поддержка была бы тривиальной.

+0

Почти, но не обрабатывает пустые массивы ... –

+0

@Martin: Неясно, стоит ли это требование или нет. Конечно, было бы очень просто поддержать. – Noldorin

+0

Linq не подходит для этого проекта, к сожалению – Jon

6

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

+0

Приятный, я почти вижу код! – Secko

5

Как о чем-то вроде ...

string numArray = "1,1,1,1,1"; 
return numArrray.Split(',').Distinct().Count() <= 1; 
+0

Linq не подходит для этого проекта, к сожалению – Jon

1

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

if (new HashSet<string>(numbers.Split(',')).Count == 1) ... 
Смежные вопросы