迭代扑克牌阵列并验证套装

时间:2011-04-29 20:26:49

标签: ruby rspec

我正在处理一个如下所示的数组:

cards = [#<Cardshark::Card:0x9200cc @rank=:ace, @suit=:coins>, etc]

4件套装(硬币,剑,杯子,俱乐部)中的每件套装都包含通过7张和3张面牌的等级,每张“套牌”共有40张牌

我希望编写一个rspec测试来验证该数组包含4个套装。我开始沿着使用正则表达式使用@cards.select和一个块的路径,并且很快就变得丑陋了。

处理此问题的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

尝试使用Enumerable#group_by:

num_suits = cards.group_by { |card| card.suit }.length

在IRB:

~$ irb
>> groups = (1..10).group_by { |n| n % 4 }
=> {0=>[4, 8], 1=>[1, 5, 9], 2=>[2, 6, 10], 3=>[3, 7]}
>> groups.length
=> 4

答案 1 :(得分:2)

describe Cardshark, "@cards" do
  it "should contain four suits" do
    suits = @cards.map { |card| card.suit }.uniq
    suits.size.should be 4
  end
end