gpt4 book ai didi

ruby - 在 Ruby 矩阵中交换列或行

转载 作者:太空宇宙 更新时间:2023-11-03 18:00:57 25 4
gpt4 key购买 nike

我想交换数组数组(即矩阵)中的行或列。我在网上找到了这个交换方法,我用我的 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

关于ruby - 在 Ruby 矩阵中交换列或行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4845245/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com