Перебирать массив игральных карт и проверять масти - PullRequest
0 голосов
/ 30 апреля 2011

Я работаю с массивом, который выглядит следующим образом:

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

Каждая из 4 мастей (монеты, мечи, кубки, клюшки) содержит разряды туза на 7 и 3 лицевых картах, что в сумме составляет 40 карт в каждой колоде

Я хочу написать тест rspec, чтобы убедиться, что массив содержит 4 масти. Я начал идти по пути использования @cards.select с блоком с использованием регулярных выражений, и это стало довольно быстро уродливо.

Какой лучший способ справиться с этим?

Ответы [ 2 ]

2 голосов
/ 30 апреля 2011
describe Cardshark, "@cards" do
  it "should contain four suits" do
    suits = @cards.map { |card| card.suit }.uniq
    suits.size.should be 4
  end
end
2 голосов
/ 30 апреля 2011

Попробуйте использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...