Arrays 在ruby中将哈希与数组进行比较
我正在尝试比较一个哈希和一个数组,以便在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}
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代码。