如何在Ruby中比较两个数组是否具有相似的值

时间:2018-10-15 08:01:16

标签: arrays ruby

我正在将API响应与数据库字段进行比较。我已经将API响应存储在一个数组中,并将数据库字段存储在另一个数组中

API_Response = "2451423412", "2453565", "23563425645", "43252436", "4676345"

Database_Response = 768567, 4534534, 32451423412, 6978657, 2453565 , 23563425645, 43252436, 4676345

在“ Database__Response”数组中,我有8个值,其中5个值与“ API_Response”数组类似。

我想从“ API Response”中删除双引号,然后比较“ Database__Response”数组中“ API_Response”数组中的所有值是否可用

5 个答案:

答案 0 :(得分:1)

将字符串数组转换为整数数组。然后对数组进行排序以比较数组

API_Response.map(&:to_i).sort == Database_Response.sort

仅当排序后两个响应数组相等时,此方法才返回true。

答案 1 :(得分:1)

如果要查看API_ReponseDatabase_Response的所有值是否可用,则应执行以下操作:

API_Response = API_Response.map(&:to_i)
(API_Response - Database_Respone).size.zero?

第二个LOC的结果将确定API_Response中是否存在Database_Response的所有值

答案 2 :(得分:1)

我会做这样的事情:

API_Response.all? { |number| Database_Response.include?(number.to_i) }

all?一旦发现未包含的number就返回,因此比检查所有数字更快。

根据Database_Response的大小,可能首先将数组转换为Set是有意义的。此外,您可能希望通过使用数据库来解决此问题而不是先将所有记录加载到内存中来提高性能。

答案 3 :(得分:1)

我认为它可以帮助您检查

要从API响应中删除双引号,只需执行

            API_Response = API_Response.map(&:to_i)

现在要比较API_Response和Database_Response

        result =  API_Response & Database_Response 

这将比较两个数组并为您提供两个数组的共同值

       result = [2453565, 23563425645, 43252436, 4676345]

希望这对您有所帮助。

答案 4 :(得分:1)

如果您正在寻找简单的true / false结果,我建议您看一下Set类。它包含一些有用的方法来检查一个集合是另一个集合的超集还是子集。

require 'set'

API_Response.map!(&:to_i)
Set.new(API_Response) <= Set.new(Database_Respone)
#=> false

请记住,从数组创建集合时,重复值会被自动删除。

参考: