比较ruby中的2个数组内容
我有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中可以有重复。数组大小将相同。不会有更少的元素,也不会有更少的元素。
如何
@var2.reverse == @var3
谢谢,但这不会起作用。我希望能够比较数组中的每个值“@ 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
我想要能够通过数组的值循环的东西 – user1126946 2012-03-25 06:13:44
您是否尝试过代码?它应该比较数组中的每个元素,并且即使有一件事不匹配也会返回false。 – Dogbert 2012-03-25 06:17:00
比较它们的长度与他们intersection长度:
@var2.length == @var3.length && @var2.length == (@var2 & @var3).length
这是应该做的正确方法。编辑明显的错误 – 2012-03-25 07:32:30
感谢编辑@ Marc-AndréLafortune!过了好几个小时就直接编码了,太迟了,所以我最终做出了这样的愚蠢的错误':)'。 – 2012-03-25 07:33:33
请注意,解决方案假定没有重复项。 – 2012-03-25 07:35:44
排序数组你比较之前:
@var2.sort == @var3.sort
除非我失踪事情,这基本上是问题所在。
嗨,感谢您的回应。我已经更新了原来的问题。请看一看。谢谢 – user1126946 2012-03-25 11:59:53
排序不适合我。 – user1126946 2012-03-25 12:02:00
任何变量使用的操作符
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 >
一半是没有的,我认为他们是为了嵌套数组? – 2012-03-25 06:23:54
另外,你的问题很不明确:你想知道数组是否包含完全相同的元素,而不管顺序如何?或者订单是否重要?所有元素都是独特的吗? – 2012-03-25 06:29:22
@Andrew,对不起,他们是嵌套数组。并想知道数组是否包含完全相同的元素,顺序无关紧要。 – user1126946 2012-03-25 07:17:17