To make things simple, let the deck be just ['A', 'B']. Here is a step-by-step evaluation:
deck = ['A', 'B'] deck[deck.index("A")], deck[deck.index("B")] = deck[deck.index("B")], deck[deck.index("A")] # deck == ['A', 'B'] deck[deck.index("A")], deck[deck.index("B")] = deck[1], deck[0] # deck == ['A', 'B'] deck[deck.index("A")], deck[deck.index("B")] = 'B', 'A' # deck == ['A', 'B'] deck[0], deck[deck.index("B")] = 'B', 'A' # deck == ['A', 'B'] # Applying first assignment. ..., deck[deck.index("B")] = ..., 'A' # deck == ['B', 'B'] # NOTE: deck.index("B") is 0 now, not 1! ..., deck[0] = ..., 'A' # deck == ['B', 'B'] # Applying second assignment. ... # deck == ['A', 'B']
What your code actually does is simply bind the tweets to the same element of the array.
To fix this problem, just store the deck.index () values ββin a temporary array:
deck = [] (deck << (1..52).to_a << 'A' << 'B').flatten! p deck index_a, index_b = deck.index("A"), deck.index("B") deck[index_a], deck[index_b] = deck[index_b], deck[index_a] p deck
source share