ruby - 如何根据另一个数组重新排序数组?

标签 ruby arrays

我正在编写一个“洗牌程序”来玩 Ruby。认为这是我给自己布置的个人作业,以了解更多信息:)

我想要的输出在这里:

----Triple Cut Deck on 3rd and 5th cards---------
  -- reset
Number: 1,  Position: 3, Suit: Clubs, Card: 3
Number: 2,  Position: 4, Suit: Clubs, Card: 4
Number: 3,  Position: 1, Suit: Clubs, Card: 5
Number: 4,  Position: 2, Suit: Clubs, Card: 6
Number: 5,  Position: 5, Suit: Clubs, Card: Ace
Number: 6,  Position: 6, Suit: Clubs, Card: 2

但我得到:

----Triple Cut Deck on 3rd and 5th cards---------
  -- reset
Number: 1,  Position: 3, Suit: Clubs, Card: 3
Number: 2,  Position: 4, Suit: Clubs, Card: 4
Number: 3,  Position: 5, Suit: Clubs, Card: 5
Number: 4,  Position: 5, Suit: Clubs, Card: 5
Number: 5,  Position: 6, Suit: Clubs, Card: 6
Number: 6,  Position: 6, Suit: Clubs, Card: 6

基本上我想要得到的是重新排序的卡片,以便“Ace,2,3,4,5,6”的卡片顺序从“1,2,3,4,5”更改为“5” , 6, 3, 4, 1, 2"。换句话说,最上面的两张牌在底部(按顺序),最下面的两张牌在顶部和中间保持不变。这是 3 路切牌的一个版本.

我很难让这个数组“重新排序”正常工作。 现在卡“rank”和card_position变得困惑,如上所示,有重复等。

class Card
  RANKS = %w(Ace 2 3 4 5 6 7 8 9 10 J Q K )
  SUITS = ['Clubs', 'Diamonds', 'Hearts', 'Spades']
  SCORES = [1..54]
  attr_accessor :rank, :suit, :card_position

  def initialize(id, rank='', suit='', card_position=0)
    self.card_position =  id
    self.rank = RANKS[(id % 14)-1]
    self.suit = SUITS[(id / 14)]
  end
end

class Deck
  DECK_SIZE = 6
  attr_accessor :cards
  def initialize
    self.cards = (1..DECK_SIZE).to_a.collect { |id| Card.new(id) }
    @deck = cards
  end

  def process_cards

    puts "\n----Triple Cut Deck on 3rd and 5th cards---------"
    self.triple_cut_deck(3, 5, true)
    self.show_deck

  end

  def show_deck
    @deck.sort_by!(&:card_position).each_with_index do |card, index|
      puts 'Number: ' + (index+1).to_s + ",  Position: #{card.card_position.to_s}, Suit: #{card.suit.to_s}, Card: #{card.rank.to_s}"
    end
  end

  def triple_cut_deck(top_cut, bottom_cut, reset_deck=false)
    reset_the_deck(reset_deck)

    top_cut-= 1
    bottom_cut-= 1
    deck_array_size = DECK_SIZE-1

    @new_deck = []
    @new_deck[0..1] = @deck[4..5]
    @new_deck[2..3] = @deck[2..3]
    @new_deck[4..5] = @deck[0..1]

    DECK_SIZE.times do |card|
      @deck[card].card_position= @new_deck[card].card_position
      @deck[card].card_position= @new_deck[card].card_position
      @deck[card].card_position= @new_deck[card].card_position
    end
  end


  def reset_the_deck(reset_deck)
    puts reset_deck == true ? "  -- reset" : 'no-reset'
    initialize if (true && reset_deck)
  end

end

最佳答案

这是你想要的吗?

a = [1,2,3,4,5,6]

n = 2
b = a[-n, n] + a[n..-(n+1)] + a[0,n]

p a # => [1,2,3,4,5,6]
p b # => [5,6,3,4,1,2]

关于ruby - 如何根据另一个数组重新排序数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9182711/

相关文章:

ruby-on-rails - 使用 heroku db :push 时出现 LoadError

ruby - RVM 无法识别 .ruby 版本

C++0x 初始化列表

python - 复制 numpy 数组中的元素

java - 如何将for循环迭代回它在java中访问的最后一个索引

ruby-on-rails - 为什么似乎没有人使用 FreeBSD 来托管 Rails 应用程序?

ruby-on-rails - 使用Eventmachine写入数据库,然后使用Rails读取并显示

ruby-on-rails - Rails 4关联验证销毁

javascript - 如何根据对象中的属性合并对象数组中的对象

php - 使用 SQL 查询将值数组插入数据库?