Arrays 在ruby中将哈希与数组进行比较

Arrays 在ruby中将哈希与数组进行比较,arrays,ruby,hashtable,Arrays,Ruby,Hashtable,我正在尝试比较一个哈希和一个数组,以便在ruby中进行测试。散列保存要比较的值,数组保存要测试的结果。数组和散列具有相同数量的元素,数组的相应元素应与散列中的元素匹配。例如,数组的第一个槽需要匹配第一个散列值,然后数组和散列都应该递增到下一个值和数组槽,以查看它们是否匹配。基本上,hash[0]和array[0]需要匹配,hash[1]和array[1]需要匹配,等等 例如: hash = {1 => 100, 2 => 101, 3 => 102, 4 => 103}

我正在尝试比较一个哈希和一个数组,以便在ruby中进行测试。散列保存要比较的值,数组保存要测试的结果。数组和散列具有相同数量的元素,数组的相应元素应与散列中的元素匹配。例如,数组的第一个槽需要匹配第一个散列值,然后数组和散列都应该递增到下一个值和数组槽,以查看它们是否匹配。基本上,
hash[0]
array[0]
需要匹配,
hash[1]
array[1]
需要匹配,等等

例如:

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

array = [100, 101, 102, 103]
hash = {4 => 103, 2 => 101, 3 => 102, 1 => 100 }
hash.values # => [103, 101, 102, 100]
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[1]
array[1]
)之前,如何将代码格式化为只比较每个对应的哈希值和数组值(
hash[0]
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 
给定一个散列

hash = {1 => 100, 2 => 101, 3 => 102, 4 => 103}
您可以使用
按插入顺序获取该散列中的值。value

hash.values # => [100, 101, 102, 103]
在这一点上,可以使用简单相等来测试值是否等于数组:

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

hash.values == array # => true
这取决于散列中键的插入顺序。根据哈希的构造方式,您可能需要依赖密钥的排序顺序,例如:

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

array = [100, 101, 102, 103]
hash = {4 => 103, 2 => 101, 3 => 102, 1 => 100 }
hash.values # => [103, 101, 102, 100]
如果目的是使值根据其对应的键升序,则可以将散列转换为
[键,值]
对的数组,并根据键进行排序:

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
开始按顺序递增,则可以采用完全不同的方法在数组中迭代,并对每个数组索引比较
哈希[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

哈希和数组是否包含相同数量的元素?
hash
array
看起来如何?请发布一些示例数据,这样问题就变得更明显了。我猜测
hash.values==array
。看起来这样做可以
hash.values.sort==array.sort
注意,
。values
取决于哈希的插入顺序,这与示例数据无关。如果您的真实数据不同,那么
散列值将不起作用,您需要使用更真实的数据进行澄清。理想情况下,您应该包括实际的Ruby,您提供的哈希肯定不是语法正确的Ruby代码。