Содержит ли хеш массивов данные из массива - PullRequest
0 голосов
/ 21 мая 2018

У меня есть массив идентификаторов людей, например, такой:

people_id = [1111, 2222, 3333, 4444, 5555]

и хэш с вложенными массивами в качестве значений:

hash = {1234 => [1111], 1235 => [2222, 4444], 1236 => [1111, 1111, 5555, 1236]}

Мне нужно опросить каждый массив hash, сравнивая его с people_id массивом.Если какой-либо хэш-массив содержит более одного значения из people_id, то мне нужно вернуть ключи, поэтому в этом примере я ожидал бы вернуть 1235 и 1236, потому что:

  • 1234 ложно (присутствует только один элемент из people_id)
  • 1235 верно (присутствуют 2222 и 4444)
  • 1236верно (1111 и 5555 оба присутствуют)

Кто-нибудь может посоветовать?

Ответы [ 3 ]

0 голосов
/ 21 мая 2018
hash.select{|_, v| (v & people_id).length > 1}.keys
# => [1235, 1236]
0 голосов
/ 21 мая 2018

Примечание. Я новичок в программировании, поэтому я попытаюсь использовать две вспомогательные переменные и установить:

require 'set'

peopleIDArray = [1111, 2222, 3333, 4444, 5555]
peopleHash = {1234 => [1111], 1235 => [2222, 4444], 1236 => [1111, 1111, 5555, 1236]}
result = Set[]

peopleHash.each do |key, value|
  foundOnePerson = false
  foundTwoPerson = false

  value.each { |id|
    if peopleIDArray.include? id and !foundOnePerson
      foundOnePerson = true
      next
    end

    if peopleIDArray.include? id and !foundTwoPerson
      foundTwoPerson = true
    end

    if foundOnePerson and foundTwoPerson
      result.add(key)
    end
  }
end

p result.to_a  # => [1235, 1236]
0 голосов
/ 21 мая 2018
hash = {
  1234 => [1111],
  1235 => [2222, 4444],
  1236 => [1111, 1111, 5555, 1236]
}
array = [1111, 2222, 3333, 4444, 5555]
hash.each_with_object([]) do |(k, v), acc|
  acc << k if (v & array).size > 1
end
#⇒ [1235, 1236]

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

Обратите внимание,что (v & array).size будет хорошей заслугой, если и только array будет гарантированно уникальным.

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