2013-09-04 2 views
0

Для этих массивов:ли элементы массива в пределах диапазона другого массива

array_a = [50,13,25, 35, 45] 
array_b = [14,45] 

Я хочу знать, если каждое значение в Ь с диапазоном значений в.

Вот результат должен быть true, потому как 14 и 45 находятся между 13 и 50.

+5

Круто. Сообщите нам, когда закончите. –

+0

Его сделано by @adrian answer –

+0

Мы ожидаем, что ВЫ проявите усилие, предоставив код, который вы написали, чтобы решить проблему, объяснив, почему она не работает для вас. Просить код, не проявляя усилий, считается очень плохой формой в Stack Overflow и является отличным способом закрыть ваш вопрос. –

ответ

2
array_a = [50,13,25,35,45] 
array_b = [14,45] 
array_a.max >= array_b.max && array_a.min <= array_b.min 
# => true 

Edit: Решение Бабай является немного быстрее и более элегантный, я думаю.

Edit: Так наиболее эффективным решением является:

array_a = [50,13,25,35,45] 
array_b = [14,45] 
min,max = array_a.minmax 
array_b.all? {|num| num<=max && num>=min } 
# => true 
+0

Какой OP хотел видеть, не могли бы вы рассказать? Я все еще смущен. –

+0

Решение _Babai немного быстрее и элегантнее. Попробуйте это: 'puts 15.between? (20, 1)' или 'puts 15.between? (20, 1, 4)' Если мы знаем, что второй массив имеет размер 2 и он отсортирован, тогда нет необходимости в min/max, вы можете более эффективно писать b [0] и b [1] (или b.first и b.last). Кроме того, если вы думаете о том, как между? работы, сравнение напрямую будет быстрее, чем вызов метода для проведения сравнений. – 7stud

3
a = [50,13,25, 35, 45] 
b = [13,45] 

mina, maxa = a.minmax 
result = b.all? {|num| mina <= num and num <= maxa } 
puts result 

--output:-- 
true 

Или включения идеи Адриана:

a = [50, 13, 25, 35, 45] 
b = [13, 45] 

mina, maxa = a.minmax 
minb, maxb = b.minmax 

result = (mina <= minb and maxb <= maxa) 
puts result 

--output:-- 
true 
+1

Получение min() и max() обоих массивов требует прохождения каждого массива дважды. minmax() перемещает первый массив один раз и все? один раз пересекает второй массив. Более эффективным. – 7stud

3

Я бы сделать, как показано ниже: -

a = [50,13,25, 35, 45] 
b = [13,45] 
min_max_a = a.minmax 
b.all? {|num| num.between?(*min_max_a) } 
# => true 
+0

Я изначально писал '(mina..maxa) .include? (Num)' – 7stud

+0

@ 7stud Вы правы! –