私はPerlで3番目の変数を使わずに2つの変数の値を交換したいとします。 g:3番目のPerl変数を使用せずに2つのPerl変数を交換するにはどうすればよいですか?
my $first = 10;
my $second = 20;
簡単な方法でこれを行う方法を教えてください。
私はPerlで3番目の変数を使わずに2つの変数の値を交換したいとします。 g:3番目のPerl変数を使用せずに2つのPerl変数を交換するにはどうすればよいですか?
my $first = 10;
my $second = 20;
簡単な方法でこれを行う方法を教えてください。
あなたは書くことができます。
($first, $second) = ($second, $first);
(§3.4 "List Assignment" in Learning Perl, Third Editionを参照してください。)
私たちは[Learning Perl](http://www.learning-perl.com)の第6版までです:) –
あなたは人々が本当に最初の5つに注意を払っていないと言っていますか?他の回答の見た目から... ;-) –
$first = $first + $second;
$second = $first - $second;
$first = $first-$second;
を。これは、2つの整数の変数をスワップします より良い解決策は、あなたがこれを行うことができ
$first = $first xor $second;
$second = $first xor $second;
$first = $first xor $second;
これはまた、変数には数値のように加算/減算可能なデータが含まれていることを前提としています。 – abiessu
Re:「これはプログラミング言語の中で2つの整数変数を入れ替えます」:それはあまりにも幅が広いと思います。既存の変数に新しい値を割り当てることを可能にする言語に制限をかけても、整数のオーバーフローが明確に定義されていない言語のすべての整数値に対しては機能しません。 (例えば、Cではこのコードは危険です。) – ruakh
okk..my mistake。整数のオーバーフローは考慮しませんでした。しかし、私はいつもどんな言語でも整数の範囲があると思います。私が間違っていると私の間違いを指摘してください。とにかく私は答えを編集しました。ありがとう – rove101
かもしれません単純な数学を使って比較的簡単です。
わかりました。
First = 10
Second = 20
我々はFirst = First + Second
を言うなら私たちは今、次のを持っています。
First = 30
Second = 20
今、あなたは我々が今持っているSecond = First - Second (Second = 30 - 20)
を言うことができます。
今First = 30
Second = 10
マイナスまずから第二に、あなたはFirst = 20
、およびSecond = 10
を取得します。
あまりにも複雑です。なぜ($ first、$ second)=($ second、$ first) 'だけではないのですか? –
複雑なだけでなく、壊れています。この回答は削除する必要があります。 –
すでに記載されているPerlの固有の方法がある
firstValue = firstValue + secondValue;
secondValue = firstValue - secondValue;
firstValue = firstValue - secondValue;
あまりにも複雑です。なぜ($ first、$ second)=($ second、$ first) 'だけではないのですか? –
スカラーの数値以外の文字列値を破壊するので、これはうまくいきません。浮動小数点値を変更する可能性もあります。 –
このロジックを使用することができます最高ですが、ここではPerlを含む多くの言語で動作するXORを使用するテクニックがあります:
use strict;
my $x = 4;
my $y = 8;
print "X: $x Y: $y\n";
$x ^= $y;
$y ^= $x;
$x ^= $y;
print "X: $x Y: $y\n";
X: 4 Y: 8
X: 8 Y: 4
'^ '演算子が文字列と数字の形式でわずかに異なるセマンティクスを持つため、これはPerlでは機能しません。あなたの値の1つを数値でない文字列に変更すると、問題が表示されます。 –
...少なくとも$ x == $ yの場合は動作しません。 – Jan
#!/usr/bin/perl
$a=5;
$b=6;
print "\n The value of a and b before swap is --> $a,$b \n";
$a=$a+$b;
$b=$a-$b;
$a=$a-$b;
print "\n The value of a and b after swap is as follows:";
print "\n The value of a is ---->$a \n";
print "\n The value of b is----->$b \n";
スカラーの数値以外の文字列値を破棄するので、これは機能しません。浮動小数点値を変更する可能性もあります。 –
($ first、$ second)=($ second、$ first);匿名の配列を作成するので、これはあなたのルールを技術的に不正にしています。 – abiessu
@abiessu:いいえ、匿名の配列はありません。 (それらは単なるリストであり、匿名配列の場合は配列参照を得るために '[...]'を使用します)。そして、匿名配列があったとしても、私はそれを数えるとは思いません「第3の変数」とする。 – ruakh