Сравните многомерный массив и возвращаемый индекс

Рубин 1.8.7

array = [[1.5,"cm"],[1.5,"cm"],[1.5,"m"]]

Как сравнить каждый массив внутри массива переменных и посмотреть, равен ли он, если равен, то перейти к другому, если не равен, то вернуть индекс элемента массива, который не был равен, и прекратить сравнение.

Итак, в этом примере

array[0] == array[1] 
#=> true

Таким образом, двигаться дальше

array[1] == array[2]
=> false

Следовательно, возвращаемый индекс i.e = 1

return 1

person Community    schedule 25.03.2014    source источник
comment
Если все равны, то что возвращать?   -  person Arup Rakshit    schedule 25.03.2014
comment
@ArupRakshit: идея состоит в том, чтобы начать сравнение с самого начала, остановить и вернуть индекс, если он не совпадает, если все значения одинаковы, то вернуть nil   -  person    schedule 25.03.2014
comment
@MarkV Какое практическое применение у вас есть для такой функции?   -  person    schedule 25.03.2014


Ответы (2)


Вот как бы я поступил, используя Array#each_index :

def compare_array_elements(array)
  siz = array.size - 1
  array.each_index { |i| return i if i != siz && array[i] != array[i+1] }
  nil
end

array = [[1.5,"cm"],[1.5,"cm"],[1.5,"mm"]] 
compare_array_elements(array) # => 1

array = [[1.5,"cm"],[1.5,"cm"],[1.5,"cm"]]
compare_array_elements(array) # => nil
person Arup Rakshit    schedule 25.03.2014
comment
Вместо того, чтобы использовать проверку против siz, вы можете просто сделать array.each_index[0..-2] - person Tom Fenech; 25.03.2014
comment
@TomFenech То же самое, я тоже думаю здесь, на своем столе. Я снова думаю, будет ли это рубинской идеей или нет.. :-) - person Arup Rakshit; 25.03.2014
comment
@TomFenech, это должно быть array[0..-2].each_index кстати .. :) - person Arup Rakshit; 25.03.2014
comment
Верно подмечено! В любом случае, не должна ли проверка с siz быть перед сравнением, чтобы она закорачивала &&, а не сравнивала с nil? - person Tom Fenech; 25.03.2014
comment
@TomFenech Humm.. Это хорошая идея.. Действительно - person Arup Rakshit; 25.03.2014

person    schedule
comment
...Но что это значит?! - person Tom Fenech; 25.03.2014