比较ruby中的2个数组内容

时间:2012-03-25 05:10:27

标签: ruby arrays

我有来自2个不同位置的2个数组,但它们包含相同的元素。下面显示了我的内容:

@var2 =  ["2/05/2008", "$1.5000", "$2.0000"]
         ["1/06/2007", "$1.4000", "$1.0000"] 

@var3 =  ["1/06/2007", "$1.4000", "$1.0000"]
         ["2/05/2008", "$1.5000", "$2.0000"]

这是代码我如何到达上面的那些数组...不是一个很好的红宝石代码我承认它

 var1 = Nokogiri::HTML(open(file.htm))
 var1.xpath('//tr[position() > 1]').map do |row|
 @var2 = row.xpath('td').map(&:text)[0,3]
    puts @var2
 end

File.open('some.txt') do |file|
  file.each_line do |line|
    line1 = line.split(' ')
    line2 = line1[0]
    line3 = "$" + line1[1]
    line4 = "$" + line1[2]

    @var3 = line2.split(' ') + line3.split(' ') + line4.split(' ')
    puts @var3
  end
  file.close()
end

在这两个变量中,我都有这样的多行。如何比较@var2@var3?此外@var2按日期降序排列。有没有办法比较两者的价值/内容并获得结果?这也意味着使用上述格式,如果我更改其中一个数组中的值,则比较应该失败,例如:

@var2 =  ["2/05/2008", "$1.5000", "$2.0000"]
         ["1/06/2007", "$1.4000", "$1.0000"]

@var3 =  ["1/06/2007", "$1.4456", "$1.0000"]
         ["2/05/2008", "$1.5000", "$2.2222"]

我尝试了几种方法,但不幸的是它没有用。我想我需要循环到数组并进行比较,但不知道该怎么做。

我已尝试@var2 & @var3@var2 - @var3。如果我更改其中一个数组中的值,它们似乎不起作用。比较似乎仍然检查索引,并说找到匹配。我希望与每个数组中的值进行精确的逐行比较。

还有更多信息: -

我想知道数组是否包含完全相同的元素,顺序无关紧要。

数组var2和var3中可能存在重复项。数组大小将相同。不会有更少的元素,也不会有NIL。

4 个答案:

答案 0 :(得分:2)

在比较数组之前对数组进行排序:

@var2.sort == @var3.sort

除非我遗漏了什么,否则这基本上就是问题所在。

答案 1 :(得分:1)

将长度与intersection的长度进行比较:

@var2.length == @var3.length && @var2.length == (@var2 & @var3).length

答案 2 :(得分:0)

怎么样

@var2.reverse == @var3

答案 3 :(得分:0)

  

使用-

Array运算符
2.1.1 :006 > arr1 = [1,2,3,4]
=> [1, 2, 3, 4]
2.1.1 :007 > arr2 = [4,3,2,1]
=> [4, 3, 2, 1]
2.1.1 :008 > arr1-arr2
=> []
2.1.1 :009 > 

所以,你可以这样做

2.1.1 :001 > @var2 =  [["2/05/2008", "$1.5000", "$2.0000"],
2.1.1 :002 >              ["1/06/2007", "$1.4000", "$1.0000"] ]
 => [["2/05/2008", "$1.5000", "$2.0000"], ["1/06/2007", "$1.4000", "$1.0000"]] 
2.1.1 :003 > 
2.1.1 :004 >   @var3 =  [["1/06/2007", "$1.4000", "$1.0000"],
2.1.1 :005 >              ["2/05/2008", "$1.5000", "$2.0000"]]
 => [["1/06/2007", "$1.4000", "$1.0000"], ["2/05/2008", "$1.5000", "$2.0000"]] 
2.1.1 :006 > (@var2 - @var3) == []
 => true
2.1.1 :007 >