Ruby 我试图返回一个哈希数组,但只有最后一个哈希被添加到数组中?
这是我得到所有人手的方法Ruby 我试图返回一个哈希数组,但只有最后一个哈希被添加到数组中?,ruby,nokogiri,Ruby,Nokogiri,这是我得到所有人手的方法 def get_all_hands doc = Nokogiri::HTML(open('http://www.cardplayer.com/rules-of-poker/hand-rankings')) hand_hash = {} hands_array = [] doc.css('div#rules-of-poker-accordion').each do |hands| hands.css('strong').each do |hand|
def get_all_hands
doc = Nokogiri::HTML(open('http://www.cardplayer.com/rules-of-poker/hand-rankings'))
hand_hash = {}
hands_array = []
doc.css('div#rules-of-poker-accordion').each do |hands|
hands.css('strong').each do |hand|
hand_hash[:name] = hand.text
end
hands.css('div.rules-cards').each do |hand|
hand_value = []
hand.css('img').each do |card|
hand_value << card.attr('src')
hand_hash[:value] = hand_value
end
end
hands_array << hand_hash
end
hands_array
end
HandScraper.new.get_all_hands
这是第十手,也是最后一手,当我想要它返回全部10 调用doc.css('div#扑克手风琴规则')
返回一个div,因为这就是页面的结构。因此,实际上每个循环只输入一次
该站点的布局有点滑稽,因此您必须分别获取名称和值。这是一个暴力解决方案
def get_all_hands
doc = Nokogiri::HTML(open('http://www.cardplayer.com/rules-of-poker/hand-rankings'))
hands_array = []
doc.css('div#rules-of-poker-accordion').css("strong").each do |name|
hands_array.push({name: name.text, value: []})
end
doc.css('div#rules-of-poker-accordion').css(".rules-cards").each_with_index do |hand, i|
hand.css('img').each do |card|
hands_array[i][:value].push card.attr('src')
end
end
hands_array
end
doc.css('div#扑克手风琴规则')
调用返回一个div,因为这就是页面的结构。因此,实际上每个循环只输入一次
该站点的布局有点滑稽,因此您必须分别获取名称和值。这是一个暴力解决方案
def get_all_hands
doc = Nokogiri::HTML(open('http://www.cardplayer.com/rules-of-poker/hand-rankings'))
hands_array = []
doc.css('div#rules-of-poker-accordion').css("strong").each do |name|
hands_array.push({name: name.text, value: []})
end
doc.css('div#rules-of-poker-accordion').css(".rules-cards").each_with_index do |hand, i|
hand.css('img').each do |card|
hands_array[i][:value].push card.attr('src')
end
end
hands_array
end
这段特殊的代码就是它无法工作的原因。您正在对每个strong
进行迭代,将值分配给hand\u hash
的相同键(:name
)。下一次迭代也是如此。基本上,在最后一次迭代之前,您将覆盖相同的哈希而不将其保存在任何位置
hands.css('strong').each_with_index do |hand, index|
hand_hash[index] = hand.text
end
我在您自己的代码中做了一些更改以修复此问题:
doc = Nokogiri::HTML(open('http://www.cardplayer.com/rules-of-poker/hand-rankings'))
hands_array = []
doc.css('div#rules-of-poker-accordion').each do |hands|
hands.css('strong').zip(hands.css('div.rules-cards')).each do |hand, value|
hand_hash = {}
hand_hash[:name] = hand.text
hand_value = []
value.css('img').each do |card|
hand_value << card.attr('src')
hand_hash[:value] = hand_value
end
hands_array << hand_hash #here, now you are saving after each hand
end
end
hands_array
doc=Nokogiri::HTML(打开)http://www.cardplayer.com/rules-of-poker/hand-rankings'))
指针数组=[]
css文件(“div#扑克牌手风琴规则”)。每个都有手|
hands.css('strong').zip(hands.css('div.rules-cards'))。每个do | hand,value|
hand_hash={}
hand\u hash[:name]=hand.text
hand_值=[]
value.css('img')。每个do |卡|
手动值
[“/packages/cards/Large/Diamond/A-49a04aae5e96d2f948dc2062c2c4fcd5.png”,
“/packages/cards/Large/Diamond/K-0bfc14d8f58cc13891b108e4178f92f9.png”,
“/packages/cards/Large/Diamond/Q-b981aa1f57642480de1dceaf1c2e810f.png”,
“/packages/cards/Large/Diamond/J-d915fc38dbca1ca74cd75dd913de1f3.png”,
“/packages/cards/Large/Diamond/T-ef2fe11bbd701e4c5b6681e506271700.png”],
{:name=>“2.Straight flush”},{:name=>“3.Four of a kind”,:value=>
[“/packages/cards/Large/Heart/J-2bf19067cda29391286416d0d00646d6.png”,
“/packages/cards/Large/Diamond/J-d915fc38dbca1ca74cd75dd913de1f3.png”,
“/packages/cards/Large/Spade/J-fff29c49da8ca1f7a272c5ac83f51d06.png”,
“/packages/cards/Large/Club/J-58b4c0f26e3e0cf8c0772ab3e9e34784.png”,
“/packages/cards/Large/Diamond/7-7e507c2122efe10ed7abacab95edff97.png”],
{:name=>“4.满座”,value=>
[“/packages/cards/Large/Heart/T-c3f8fd4ffc3e09ec705a817aa212dc86.png”,
“/packages/cards/Large/Diamond/T-ef2fe11bbd701e4c5b6681e506271700.png”,
“/packages/cards/Large/Spade/T-9a16f63a333b3edeb50c4372f8dd9883.png”,
“/packages/cards/Large/Club/9-e6f0020a48aef9907b626477c5a60ac2.png”,
“/packages/cards/Large/Diamond/9-3E50083BAFC81A708D195F16D005125.png”],
{:name=>“5.Flush”,:value=>
[“/packages/cards/Large/Spade/4-4200c8b5f3f5ba04d9fd5a69d71dab2f.png”,
“/packages/cards/Large/Spade/J-fff29c49da8ca1f7a272c5ac83f51d06.png”,
“/packages/cards/Large/Spade/8-60d335b08119f600c3ca02aa58fa902d.png”,
“/packages/cards/Large/Spade/2-e2d1cee5fc0db0b70990036153d57906.png”,
“/packages/cards/Large/Spade/9-b0d71e77734375ceb3954156232f1f2d.png”],
{:name=>“6.stright”,:value=>
[“/packages/cards/Large/Club/9-e6f0020a48aef9907b626477c5a60ac2.png”,
“/packages/cards/Large/Diamond/8-6cd5b3025be0dd56cd52dfd2a49d922d.png”,
“/packages/cards/Large/Spade/7-6c1d119e9c923f8e4773cf00d05e26d6.png”,
“/packages/cards/Large/Diamond/6-a0c0218210a1a6c4ec17e5cec17ee3d8.png”,
“/packages/cards/Large/Heart/5-f498916a3011c2b7199e1c1008dbe330.png”],
{:name=>“7.一类三个”,value=>
[“/packages/cards/Large/Club/7-5610625720208cc02c1107c91365eb37.png”,
“/packages/cards/Large/Diamond/7-7e507c2122efe10ed7abacab95edff97.png”,
“/packages/cards/Large/Spade/7-6c1d119e9c923f8e4773cf00d05e26d6.png”,
“/packages/cards/Large/Club/K-3e8312c33de4718943cd0276de8a16a1.png”,
“/packages/cards/Large/Diamond/3-909f8b157151f834c774576c93eae26594.png”],
{:name=>“8.Two-pair”,value=>
[“/packages/cards/Large/Club/4-33a9251d25da1ea2ba49e69e94549aee.png”,
“/packages/cards/Large/Spade/4-4200c8b5f3f5ba04d9fd5a69d71dab2f.png”,
“/packages/cards/Large/Club/3-0C3EDA54CB6808B0A94950C045E497A.png”,
“/packages/cards/Large/Diamond/3-909f8b157151f834c774576c93eae26594.png”,
“/packages/cards/Large/Club/Q-9fcc4fd7692aa96ba9fcb04fa9fd727d.png”],
{:name=>“9.Pair”,:value=>
[“/packages/cards/Large/Heart/A-748f3f87f79ac475e6a432750725b64c.png”,
“/packages/cards/Large/Diamond/A-49a04aae5e96d2f948dc2062c2c4fcd5.png”,
“/packages/cards/Large/Club/8-c3708e4821723f1100d514e5280b3f32.png”,
“/packages/cards/Large/Spade/4-4200c8b5f3f5ba04d9fd5a69d71dab2f.png”,
“/packages/cards/Large/Heart/7-1610ff3e74c68f6dd8a855bd1688747.png”],
{:name=>“10.高卡”,value=>
[“/packages/cards/Large/Diamond/3-909f8b1571f834c774576c93eae26594.png”,
“/packages/cards/Large/Club/J-58b4c0f26e3e0cf8c0772ab3e9e34784.png”,
“/packages/cards/Large/Spade/8-60d335b08119f600c3ca02aa58fa902d.png”,
“/packages/cards/Large/Heart/4-712ce04b7f2c7e588c48a1e2b46a4244.png”,
“/packages/cards/Large/Spade/2-e2d1cee5fc0db0b70990036153d57906.png”]}]
希望它能有所帮助:)这段特殊的代码就是它无法工作的原因。您正在对每个strong
进行迭代,将值分配给hand\u hash
的相同键(:name
)。下一次迭代也是如此。基本上,在最后一次迭代之前,您将覆盖相同的哈希而不将其保存在任何位置
hands.css('strong').each_with_index do |hand, index|
hand_hash[index] = hand.text
end
我在您自己的代码中做了一些更改以修复此问题:
doc = Nokogiri::HTML(open('http://www.cardplayer.com/rules-of-poker/hand-rankings'))
hands_array = []
doc.css('div#rules-of-poker-accordion').each do |hands|
hands.css('strong').zip(hands.css('div.rules-cards')).each do |hand, value|
hand_hash = {}
hand_hash[:name] = hand.text
hand_value = []
value.css('img').each do |card|
hand_value << card.attr('src')
hand_hash[:value] = hand_value
end
hands_array << hand_hash #here, now you are saving after each hand
end
end
hands_array
doc=Nokogiri::HTML(打开)http://www.cardplayer.com/rules-of-poker/hand-rankings'))
指针数组=[]
css文件('
array.map { |element| method(element) }