2013-11-25 44 views
0

我我正在做一個簡單的彩票遊戲。目前它從txt文件中獲取序列號和抽獎號碼,並將它們放入2維數組中。重複2維數組

現在我想打一個檢查等級,如果有

example: 
5153,177 = 1 
54338,115 = 1 
74522,171 = 3 

我試過做一個檢查數量方法的序列號和開獎號碼中的任何重複,它不給任何錯誤,但是當我不

puts sold.checkgrade 

它不工作

我怎樣才能使它在我的例子做什麼樣的?

class Lottery 

    attr_accessor :lotnumber 
    attr_accessor :serialnumber 


    def initialize(lotnumber, serialnumber) 
     @lotnumber = lotnumber 
     @serialnumber = serialnumber 
    end 

    def checknumber 
     ObjectSpace.each_object(Lottery).to_a.select do |other| 
     @lotnumber == other.lotnumber && @serialnumber == other.serialnumber 
     end.size 
    end 

end 

我的txt

29371,43 
13797,6 
8114,55 
70657,106 
32741,74 
7272,103 
37416,14 
5153,177 
54338,115 
74522,171 
74522,171 
74522,171 
+1

嘿用戶!請正確縮進您的代碼。另外,Ruby使用'_'來分隔變量和函數名稱中的單詞! – screenmutt

回答

0

Ruby的group_by方法是一個很好的起點:如果你想要一個散列,而不是

data.group_by{ |s| s } 
# => {"29371,43"=>["29371,43"], 
#  "13797,6"=>["13797,6"], 
#  "8114,55"=>["8114,55"], 
#  "70657,106"=>["70657,106"], 
#  "32741,74"=>["32741,74"], 
#  "7272,103"=>["7272,103"], 
#  "37416,14"=>["37416,14"], 
#  "5153,177"=>["5153,177"], 
#  "54338,115"=>["54338,115"], 
#  "74522,171"=>["74522,171", "74522,171", "74522,171"]} 

data = %w[ 
    29371,43 
    13797,6 
    8114,55 
    70657,106 
    32741,74 
    7272,103 
    37416,14 
    5153,177 
    54338,115 
    74522,171 
    74522,171 
    74522,171 
] 

data.group_by{ |s| s }.map{ |k, v| [k, v.size] } 
# => [["29371,43", 1], 
#  ["13797,6", 1], 
#  ["8114,55", 1], 
#  ["70657,106", 1], 
#  ["32741,74", 1], 
#  ["7272,103", 1], 
#  ["37416,14", 1], 
#  ["5153,177", 1], 
#  ["54338,115", 1], 
#  ["74522,171", 3]] 

內神奇的是,group_by創建陣列的哈希陣列陣列:

Hash[data.group_by{ |s| s }.map{ |k, v| [k, v.size] }] 
# => {"29371,43"=>1, 
#  "13797,6"=>1, 
#  "8114,55"=>1, 
#  "70657,106"=>1, 
#  "32741,74"=>1, 
#  "7272,103"=>1, 
#  "37416,14"=>1, 
#  "5153,177"=>1, 
#  "54338,115"=>1, 
#  "74522,171"=>3} 
+0

真棒,但它怎麼寫#<彩票:0x007fc95187fad8>,而不是serialnumber和lotterynumber – user3033493

+0

這寫道?但是,在任何情況下,它都不會顯示在我的機器上,它只顯示我在Ruby 2.0.0-p247中使用IRB,PRY和Sublime Text對答案進行測試的答案。 –

0

這是一個完整的工作示例,只是名稱改變。

嘗試運行此代碼,然後修改名稱以匹配您的項目。

class Counter 
    attr_accessor :a 
    attr_accessor :b 

    def initialize(a, b) 
    @a, @b = a, b 
    end 

    def check_duplicates 
    ObjectSpace.each_object(self.class).to_a.select do |other| 
     @a == other.a && @b == other.b 
    end.size 
    end 
end 


two_match = Counter.new(1, 2) # 2 Matches 
duplicate = Counter.new(1, 2) 
no_match = Counter.new(1, 1) # 1 Match 

puts two_match.check_duplicates 
# => 2 

puts no_match.check_duplicates 
# => 1 
+0

'

':未定義的方法'check_duplicates' 爲#<彩票:0x007fa3c987fb58 @ lotnumber = 1,@ SERIALNUMBER = 2>(NoMethodError) 我得到這個錯誤現在 可以你解釋(1,2)和(1, 1)這些數字是什麼? – user3033493

+0

好像似乎工作,但這些數字 (1,2)和(1,1) 這些數字做什麼? – user3033493

+0

這些數字只是佔位符,而不是您提交的較長的數字。 – screenmutt