Проверьте, все ли элементы в 2d массиве равны (Ruby) - PullRequest
0 голосов
/ 10 февраля 2019

Посмотрев здесь, я определил текущий метод тестирования, если массив неизвестного размера содержит совпадающие элементы;

def matching_elements? array
array.uniq.length == 1
end

Я пытался расширить это, чтобы охватить двумерный массив неизвестныхsize с использованием следующего:

def all_elements_identical? array
array.each { |subarray| matching_elements?(subarray) }
end

Вышеприведенное возвращает true/false для каждого подмассива, но мне трудно подумать о том, как использовать результаты объединенных методов в условном выражении.Я хотел бы сделать что-то, основываясь на том, содержит ли массив 2d совпадающие элементы или нет, поэтому для «тестового» массива оба значения должны быть истинными

matching_elements?(test)
all_elements_identical?(test)

Вот код I 'Я использовал «puting» как раз для подтверждения того, что методы делают то, что я намереваюсь, но я не знаю, как перевести эту возвращенную информацию в условное выражение, указанное в скобках в комментарии кода;

test = [[2,2,2,2,2,2],
        [2,2,2,2,2,2],
        [2,2,2,2,2,2],
        [2,2,2,2,2,2],
        [2,2,2,2,2,2],
        [2,2,2,2,2,2],
        [2,2,2,2,2,2]]

def is_identical? array
array.uniq.length == 1
end

def all_identical? array
array.each { |subarray| puts is_identical?(subarray)} 
end

print "Primary array contains matching elements? "
puts is_identical?(test)
puts "Subarrays each contain matching elements?"
all_identical?(test)

=begin
  if (2d elements are all identical) == true
    "YAY"
  end
=end

Ответы [ 3 ]

0 голосов
/ 10 февраля 2019

Чтобы проверить один размерный массив, как вы уже сделали:

test[0].uniq.size == 1

Чтобы проверить 2D-массив, сделайте то же самое:

test.uniq.size == 1

или

test.all? { |e| e == test.first }
0 голосов
/ 10 февраля 2019

Вам не нужно ничего больше, чем этот простой 1 вкладыш

[[1,2,3],[1,2,3],[1,2,3]].uniq.count == 1 #=> true

[[1,2],[1,2,3],[1,2,3]].uniq.count == 1 #=> false
0 голосов
/ 10 февраля 2019

Я не уверен, что это самый эффективный способ сделать это, но это лучшая идея, о которой я мог подумать:

def all_elements_identical? array
    matching_elements? array.flatten
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...