В Ruby как вы сортируете один многомерный массив по другому многомерному массиву? - PullRequest
4 голосов
/ 05 апреля 2010

Допустим, у меня есть массив: a = [[1,2,3], [4,5]] и у меня есть другой массив: b = [[2.5,1.5,3.5], [1.5,2.5]]

Мне нужно отсортировать «a» по «b». т.е. результат должен быть = [[3,1,2], [5,4]]

Я пытался, но мой код казался очень длинным. Было бы здорово, если бы вы могли мне помочь. Спасибо!

Ответы [ 2 ]

3 голосов
/ 05 апреля 2010

Это дает ваш пример вывода для примера ввода, так что, надеюсь, это то, что вы хотите (он сортирует значения каждого подмассива в первом массиве по значению в той же позиции в соответствующем подмассиве второго массива, по убыванию):

class Array
  def sort_by_other_array(arr)
    zip(arr).sort_by {|x,y| y}.map {|x,y| x}
  end
end

a=[[1,2,3],[4,5]]
b=[[2.5,1.5,3.5],[1.5,2.5]]
a.zip(b).map {|x,y| x.sort_by_other_array(y).reverse}
#=> [[3, 1, 2], [5, 4]]
1 голос
/ 05 апреля 2010

В следующий раз было бы неплохо опубликовать ваш код, и объяснение контекста также может быть полезно.

Вот способ получить желаемые результаты

a.zip(b).map do |values, sort_values|
  sort_values.zip(values).sort.reverse_each.map{|sort, value| value}
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...