比较数组中的值并删除 Ruby/Rails 中不同的项目

Posted

技术标签:

【中文标题】比较数组中的值并删除 Ruby/Rails 中不同的项目【英文标题】:Compare values in array and remove items that are not the same in Ruby/Rails 【发布时间】:2022-01-16 19:01:24 【问题描述】:

我的表单发送了一组项目/值。 我想比较每个项目的值,只有当值不同时才删除/匹配项目。我在代码中添加了一些 cmets 来提供帮助。

    temp_array = []
    # remove/match duplicate drinks with different values
    params[:drinks].values.each do |v| 
                    
        # get drink id
        drink_id = v[:id]   
                    
        # store values in temp_array
        temp_array << v
                    
        # if the values below are NOT the same for the SAME drink_id
        # store them in a new array to perform task on them
        v[:optimized_nickname], v[:optimized_country_id], v[:optimized_region_id]
        # ...
        # compare values to values set in temp_array for same drink_id
                    
    end

目标是使用 status=0 为相同的饮料/drink_id 标记具有不同值(至少 1 个不同值)的所有饮料。

我需要/想要检查不同的值,而不是使用表单发送的所有值。

我很确定 .map 或 .filter 存在一个简单的解决方案,但我很难使用它们。 提前致谢,

编辑:根据要求,我想要一个示例:

# the form sends this, first and third drinks have same id wbut different values
"drinks"=>
"season_id_a9840059-cc91-47aa-9098-4bf8a45655e7"=>"id"=>"f00b5b20-0250-4e0d-8a05-c70905030a32", "optimized_nickname"=>"La Dame", "optimized_country_id"=>"1", "optimized_region_id"=>"2", 
"season_id_8ee93dc5-abd3-4cdd-ad20-29fcf1168a66"=>"id"=>"de034565-0250-4e0d-8a05-c70905030a32", "optimized_nickname"=>"La Dame", "optimized_country_id"=>"1", "optimized_region_id"=>"2", 
"season_id_f00b5b20-0250-4e0d-8a05-c70905030a32"=>"id"=>"f00b5b20-0250-4e0d-8a05-c70905030a32", "optimized_nickname"=>"L'homme", "optimized_country_id"=>"1", "optimized_region_id"=>"2", 


# I want to keep the second drink
# drinks OK => STATUS 1
"drinks_OK"=>
"season_id_8ee93dc5-abd3-4cdd-ad20-29fcf1168a66"=>"id"=>"de034565-0250-4e0d-8a05-c70905030a32", "optimized_nickname"=>"La Dame", "optimized_country_id"=>"1", "optimized_region_id"=>"2", 


# I want to remove/edit the first and third with an update
# drinks KO => STATUS 0
"drinks_KO"=>
"season_id_a9840059-cc91-47aa-9098-4bf8a45655e7"=>"id"=>"f00b5b20-0250-4e0d-8a05-c70905030a32", "optimized_nickname"=>"La Dame", "optimized_country_id"=>"1", "optimized_region_id"=>"2", 
"season_id_f00b5b20-0250-4e0d-8a05-c70905030a32"=>"id"=>"f00b5b20-0250-4e0d-8a05-c70905030a32", "optimized_nickname"=>"L'homme", "optimized_country_id"=>"1", "optimized_region_id"=>"2", 

【问题讨论】:

你能举一个输入和预期输出的例子吗? 我觉得你可以试试params[:drinks].values.group_by |v| v[:id].transform_values(&amp;:uniq) BroiSatse,我添加了一个带有值的示例。 我想检查要比较的值,而不是使用所有值。 ;) 【参考方案1】:

你可以使用reject:

params[drinks].values.reject |i| i == v[:id]

将返回一个值不等于v[:id]的数组

【讨论】:

mejiaro,我想,这不是我想做的。只有当同一种饮料的至少一个值不同时,我才想拒绝,这意味着我需要比较v[:optimized_nickname], v[:optimized_country_id]...等 如果reject 的返回值为空,则表示您的值相同。如果它不为空,那么您将拥有不同的值,并且可以随心所欲地使用它们。

以上是关于比较数组中的值并删除 Ruby/Rails 中不同的项目的主要内容,如果未能解决你的问题,请参考以下文章

找到重复的值并比较另一个键

比较数组中的值并更改值[关闭]

协助表格添加行中的值并使用按钮删除它们。使用 jQuery

比较 2 个表中的值并生成具有差异的新表

比较两行数据之间的值并仅显示不同的列

从Mongo DB嵌套数组中获取不同的值并输出到单个数组