Как я тестирую, если все объекты в массиве идентичны?

Я могу генерировать несколько строк кода, которые сделают это, но я задаюсь вопросом, существует ли хороший чистый Rubyesque способ сделать это. В случае, если я не был ясен, что я ищу, метод массива, который возвратит true, если дали (говорят) [3,3,3,3,3] или ["rabbits","rabbits","rabbits"] но возвратит false с [1,2,3,4,5] или ["rabbits","rabbits","hares"].

Спасибо

51
задан brad 12 July 2010 в 13:15
поделиться

3 ответа

class Array
  def same_values?
    self.uniq.length == 1
  end
end


[1, 1, 1, 1].same_values?
[1, 2, 3, 4].same_values?

А что насчет этого? Он возвращает false для пустого массива, однако вы можете изменить его на <= 1, и в этом случае он вернет true. В зависимости от того, что вам нужно.

63
ответ дан 7 November 2019 в 09:47
поделиться

Вы можете использовать Enumerable#all?, который возвращает true, если заданный блок возвращает true для всех элементов коллекции.

array.all? {|x| x == array[0]}

(Если массив пуст, блок никогда не будет вызван, поэтому использование array[0] безопасно)

.
76
ответ дан 7 November 2019 в 09:47
поделиться

Мне тоже нравится лучший, короткий и сладкий предпочтительный ответ. Если бы все элементы принадлежали к одному классу Enumerable, например Numeric или String, можно было бы использовать

def all_equal?(array) array.max == array.min end
10
ответ дан 7 November 2019 в 09:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: