2012-03-25 64 views
1

我有2个不同位置的数组,但它们包含相同的元素。下面显示了我:比较ruby中的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"] 

这是我的代码是如何在这些阵列above..not一个很好的Ruby代码到我承认它

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中可以有重复。数组大小将相同。不会有更少的元素,也不会有更少的元素。

+2

一半是没有的,我认为他们是为了嵌套数组? – 2012-03-25 06:23:54

+0

另外,你的问题很不明确:你想知道数组是否包含完全相同的元素,而不管顺序如何?或者订单是否重要?所有元素都是独特的吗? – 2012-03-25 06:29:22

+0

@Andrew,对不起,他们是嵌套数组。并想知道数组是否包含完全相同的元素,顺序无关紧要。 – user1126946 2012-03-25 07:17:17

回答

0

如何

@var2.reverse == @var3 
+0

谢谢,但这不会起作用。我希望能够比较数组中的每个值“@ var2 to @ var3”。例如,如果我将“@ var3”中的值从[“2/05/2008”,“$ 1.5000”,“$ 2.0000”]更改为[“2/05/2008”,“$ 1.5000”,“$ 2.22222”],那么与“@ var2”的比较应该是错误的和错误的。希望有帮助 – user1126946 2012-03-25 06:12:47

+0

我想要能够通过数组的值循环的东西 – user1126946 2012-03-25 06:13:44

+2

您是否尝试过代码?它应该比较数组中的每个元素,并且即使有一件事不匹配也会返回false。 – Dogbert 2012-03-25 06:17:00

1

比较它们的长度与他们intersection长度:

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

这是应该做的正确方法。编辑明显的错误 – 2012-03-25 07:32:30

+0

感谢编辑@ Marc-AndréLafortune!过了好几个小时就直接编码了,太迟了,所以我最终做出了这样的愚蠢的错误':)'。 – 2012-03-25 07:33:33

+1

请注意,解决方案假定没有重复项。 – 2012-03-25 07:35:44

2

排序数组你比较之前:

@var2.sort == @var3.sort 

除非我失踪事情,这基本上是问题所在。

+0

嗨,感谢您的回应。我已经更新了原来的问题。请看一看。谢谢 – user1126946 2012-03-25 11:59:53

+0

排序不适合我。 – user1126946 2012-03-25 12:02:00

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 >