- Не уверен, что мне нужно два выражения while
Нет. Вам нужно только пройти список один раз. Вы пересекаете, а не сортируете / переупорядочиваете.
l oop, кажется, сравнивает только первый набор чисел, поэтому 7 и 2. Не уверен, почему останавливается l oop.
Это потому, что вы return true
используется как второе последнее утверждение вашего внешнего l oop. Return прерывает выполнение функции и немедленно возвращает вызывающую функцию - в данном случае последнюю строку вашей программы.
Чувствую, что я должен использовать блок для этого, но не уверен, где его реализовать.
Блок - идиоматический c ruby способ решить эту проблему. По сути, вы хотите проверить, что ваш второй параметр больше, чем любое значение в списке, которое является вашим первым параметром.
Решение в idiomati c ruby будет
def hj (arr, h)
# return true if h >= all elements in arr, false otherwise
# given arr = [1, 2, 3] and h = 2,
# returns [ true, true, false ] which all? then returns as false
# (since all? returns the boolean AND of the results of the block evaluation
arr.all? { |elem| elem <= h }
end