Подтвердить что ты не робот

Как проверить, идентичны ли все элементы массива?

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

Спасибо

4b9b3361

Ответ 1

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. В зависимости от того, что вам нужно.

Ответ 2

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

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

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

Ответ 3

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

def all_equal?(array) array.max == array.min end

Ответ 4

Я использовал:

def add_equal?(arr) arr.reduce { |x,y| x == y ? x : nil } end

Он может выйти из строя, если arr содержит nil.

Ответ 5

Я бы использовал:

array = ["rabbits","rabbits","hares", nil, nil]
array.uniq.compact.length == 1