Сопоставьте набор данных с предопределенным набором данных и сохраните его в формате хэша

#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}