Сопоставить набор данных с предопределенным набором данных и сохранить его в формате хэша - PullRequest
0 голосов
/ 14 марта 2019

Мне нужно иметь возможность сопоставлять данные из массива случайных целочисленных значений и передавать их в хэш в определенном контуре, сопоставляя случайные данные с определенным набором данных.

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 голос
/ 14 марта 2019

Соедините ключи и значения, исключите те, в которых ключ отсутствует в заранее определенном наборе данных, затем превратите список пар ключ-значение в хеш.

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) && defined.include?(v)
}.to_h

Если важна скорость, вы можете превратить некоторые вещи в наборы (в частности, defined).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...