2012-03-25 54 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 >