#ruby-on-rails #ruby #loops #hash
#ruby-on-rails #ruby #циклы #хэш
Вопрос:
Мне нужно иметь возможность сопоставлять данные из массива случайных целых чисел и передавать их в хэш в определенной структуре при сопоставлении случайных данных с определенным набором данных.
empty = {}
defined = [1,2,17,34,3,18,17]
dataset_one = [1,0,17]
dataset_two = [3,18,2,4]
desired = { 1 => 3, 17 => 2}
Это то, что у меня есть на данный момент:
defined.each{ |item|
dataset_one.each{ |key|
if item == key
empty[key] = nil
end
dataset_two.each{ |value|
if item = value
empty[key] = value
}
}
}
Комментарии:
1. Вы редко можете задать вопрос однозначно, когда формулируете его в терминах одного примера. Это не исключение. Сформулируйте свой вопрос словами в начале, а затем используйте пример для иллюстрации.
Ответ №1:
Соедините ключи и значения, исключите те, где ключа нет в предопределенном наборе данных, затем превратите список пар ключ-значение в хэш.
dataset_one.zip(dataset_two).select { |k, v| defined.include?(k) }.to_h
# => {1=>3, 17=>2}
Из вопроса неясно, нужно ли вам проверять оба ключа и значения defined
; если да, то модификация тривиальна:
dataset_one.zip(dataset_two).select { |k, v|
defined.include?(k) amp;amp; defined.include?(v)
}.to_h
Если важна скорость, вы можете захотеть превратить некоторые из ваших материалов в наборы ( defined
в частности).
Комментарии:
1. что-то вроде этого, я чувствую, что это утверждение объяснило бы это лучше, если dataset_one содержит значение из defined, а dataset_two содержит значение из defined, передайте эти значения в хэш, отформатированный в hash = {dataset_one: => dataset_two}