ruby 比较数组中具有相同值的不同对象

vhmi4jdf  于 2023-01-01  发布在  Ruby
关注(0)|答案(1)|浏览(114)

我有一个用例,其中我有两个不同的对象数组,它们由相同属性和不同/相同值组成。

x = [#<User _id: 32864efe, question: "comments", answer: "testing">]
y =  [#<ActionController::Parameters {"question"=>"comments", "answer"=>"testing"} permitted: true>}>]

现在,当我试图获得这两个对象之间的差异时,当对象由相同的值组成时,我期望差异为nil,但它返回以下响应。

x - y => [#<User _id: 32864efe, question: "comments", answer: "testing">]

在某些情况下,我可能在x对象中有多个User对象。在这种情况下,它应该返回差值。
你能建议我们如何处理这件事吗?任何帮助都将不胜感激。

q3aa0525

q3aa05251#

这就是你要找的吗?

def compare_arrays(array1, array2)
  result = []

  # Iterate through each object in array1
  array1.each do |obj1|
    # Check if the object exists in array2
    matching_obj = array2.find { |obj2| obj1 == obj2 }
    # If no matching object was found, add the object to the result array
    result << obj1 unless matching_obj
  end

  result
end

此函数循环访问array1中的每个对象,并检查array2中是否存在匹配对象。如果没有找到匹配对象,则将该对象添加到结果数组中。
您可以按如下方式使用此函数:

array1 = [{ id: 1, name: 'John' }, { id: 2, name: 'Jane' }]
array2 = [{ id: 1, name: 'John' }]

result = compare_arrays(array1, array2)
# result is [{ id: 2, name: 'Jane' }]

相关问题