高木のブログ

【Ruby】XOR 交換アルゴリズムで2つの変数の値を入れ替える

2023/05/10

XOR 交換アルゴリズムとは、XOR演算子(^)を使って、2つの変数の値を入れ替えるアルゴリズムのことで、一時変数を使わず変数の値を交換することができる

app.rb
a = 1
b = 3

puts "Before swapping: a = #{a}, b = #{b}"

a = a ^ b
b = a ^ b
a = a ^ b

puts "After swapping: a = #{a}, b = #{b}"
$ ruby app.rb
Before swapping: a = 1, b = 3
After swapping: a = 3, b = 1

配列の場合はこれが使えない

配列には XOR 演算子がないのでエラーが発生する

$ ruby app.rb
Before swapping: a = [1, 2, 3], b = [4, 5, 6]
app.rb:6:in `<main>': undefined method `^' for [1, 2, 3]:Array (NoMethodError)

a = a ^ b
      ^

算術演算子(+ と -)を使えばできなくもない(注意あり)

app.rb
a = [1, 2, 3]
b = [4, 5, 6]

puts "Before swapping: a = #{a}, b = #{b}"

a = a + b
b = a - b
a = a - b

puts "After swapping: a = #{a}, b = #{b}"
$ ruby app.rb
Before swapping: a = [1, 2, 3], b = [4, 5, 6]
After swapping: a = [4, 5, 6], b = [1, 2, 3]

注意

配列の要素に重複がある場合は失敗するので有効なやり方ではない

$ ruby app.rb
Before swapping: a = [1, 2, 3], b = [2, 3, 4]
After swapping: a = [2, 3, 2, 3, 4], b = [1]

もちろん、数値同士の入れ替えならこのやり方でも問題ない


SNS でシェアする


ytkg

Written by ytkg, Twitter, GitHub