Сравнение хеша с массивом в ruby - PullRequest
0 голосов
/ 27 сентября 2018

Я пытаюсь сравнить хеш и массив для теста в ruby.Хеш содержит значения для сравнения, а массив содержит результаты для тестирования.Массив и хеш имеют одинаковое количество элементов, и соответствующие элементы массива должны совпадать с элементами в хэше.Например, первый слот массива должен соответствовать первому значению хэша, а затем массив и хэш должны увеличиваться до следующего значения и слота массива, чтобы увидеть, совпадают ли они.В основном, hash[0] и array[0] должны совпадать, hash[1] и array[1] должны совпадать и т. Д.

Например:

hash = {1 => 100, 2 => 101, 3 => 102, 4 => 103}

array = [100, 101, 102, 103]

hash[0] и array[0] должны соответствовать, если они этого не делают, это ошибка.Но мне все равно, если hash[0] совпадает с array[1-3] или array[0] совпадает с hash[1-3].hash[1] и array[1] должны совпадать, но мне все равно, совпадет ли hash[1] с array[0, 2, 3] или если array[1] совпадет с hash[0, 2, 3].Это суть того, что мне нужно.

Допустим, у меня есть это:

hash = {1 => 100, 2 => 101, 3 => 102, 4 => 103}

array = [100, 103, 102, 103]

hash[1] и array[1] не совпадают, так что это ошибка.Но мне все равно, совпадают ли array[1] и hash[3].

Проблема с моим кодом заключается в том, что он проходит и сравнивает первое значение хеш-функции со ВСЕМИ слотами в массиве, когда меня интересуют только соответствующие (hash[0] и array[0]).Как мне отформатировать мой код, чтобы ТОЛЬКО сравнивать каждое соответствующее хеш-значение и значение массива (hash[0] и array[0]) перед переходом к следующей паре (hash[1] и array[1])?

Это то, что я имею до сих пор.

hash.each do |key, value|
 array.each do |slot|
  if slot.include? value
    puts "Key: #{key}"
    puts "Test Pass"
  else 
    puts "Test Fail"
  end 
 end
end 

1 Ответ

0 голосов
/ 27 сентября 2018

С учетом хэша ...

hash = {1 => 100, 2 => 101, 3 => 102, 4 => 103}

Вы можете получить значения в этом хэше в порядке вставки , используя .values:

hash.values # => [100, 101, 102, 103]

AВ этот момент вы можете использовать простое равенство, чтобы проверить, равны ли значения вашему массиву:

hash = {1 => 100, 2 => 101, 3 => 102, 4 => 103}
array = [100, 101, 102, 103]

hash.values == array # => true

Это зависит от порядка вставки ключей в ваш хэш.В зависимости от того, как построен ваш хэш, вам может потребоваться порядок сортировки ключей, например:

hash = {4 => 103, 2 => 101, 3 => 102, 1 => 100 }
hash.values # => [103, 101, 102, 100]

Если вы хотите, чтобы значения были в порядке возрастания в соответствии с их соответствующими ключами, выможно превратить хэш в массив из [key, value] пар и отсортировать по ключу:

hash = {4 => 103, 2 => 101, 3 => 102, 1 => 100 }

hash.to_a                           # => [[4, 103], [2, 101], [3, 102], [1, 100]]
hash.to_a.sort(&:first) .           # => [[1, 100], [2, 101], [3, 102], [4, 103]]
hash.to_a.sort(&:first).map(&:last) # => [100, 101, 102, 103]

hash.to_a.sort(&:first).map(&:last) == array # => true

Если ваши ключи хеша всегда последовательно возрастают, начиная с 1, то вы можете взять полностьюдругой подход и итерации по вашему массиву, и для каждого индекса массива сравните значение в hash[index + 1]:

hash = {1 => 100, 2 => 101, 3 => 102, 4 => 103}
array = [100, 101, 102, 103]

array.each.with_index(1).all? { |item, index| item == hash[index] } # => true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...