我想交换数组(即矩阵)中的行或列我在网上找到了这个交换方法,并用mutate函数扩展了它,其中board.matrix是数组数组:

# Swap to elements of an Array
def swap!(a,b)
  self[a], self[b] = self[b], self[a]
  self
end

def mutate(board)
  matrix = board.matrix
  random = rand
  rand_a = rand(matrix.length-1)
  rand_b = rand(matrix.length-1)

  puts "Old one:"
  board.print_matrix
  # We have a 50:50 chance of swapping either columns or rows
  if random <= 0.5
    # Swap columns: Transpose first
    puts "Swapping columns #{rand_a} and #{rand_b}..."
    temp = matrix.transpose
    temp.swap!(rand_a, rand_b)
    matrix = temp.transpose
  else
    # Just swap rows
    puts "Swapping rows #{rand_a} and #{rand_b}..."
    matrix.swap!(rand_a, rand_b)
  end
  puts "New one:"
  board.print_matrix
end

现在它对行执行它应该执行的操作:
Old one:
X  X  0  0
0  0  0  0
X  X  0  0
0  0  0  0

Swapping rows 1 and 0...
New one:
0  0  0  0
X  X  0  0
X  X  0  0
0  0  0  0

但这不适用于列为什么?
Old one:
0  X  X  0
0  0  X  0
X  0  0  0
0  0  0  0

Swapping columns 1 and 0...
New one:
0  X  X  0
0  0  X  0
X  0  0  0
0  0  0  0

最佳答案

因为在下面的代码中,您没有转换数组matrix所指向的数组,所以您只是将一个新数组赋给了matrix,它是一个局部变量:

temp = matrix.transpose
temp.swap!(rand_a, rand_b)
matrix = temp.transpose

实际上,您可以将此代码替换为:
matrix.each do |row|
    row[rand_a], row[rand_b] = row[rand_b], row[rand_a]
end

10-05 20:32
查看更多