perlを勉強し始めたのですが、
今 非共通要素の抜き出しに苦心しています。
助けていただければうれしいです。
以下は私が試したものなのですが
どうも非共通要素を抜き出せないでいます。
何故なのでしょうか?
@array = (1..10);
@cmp_array = (5..10);
@notfound=();
foreach $array_element (@array) {
foreach $cmp_array_element (@array) {
if ($array_element != $cmp_array_element) {
push @notfound, $array_element;
}
}
};
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
@array = (1..10);
@cmp_array = (5..10);
@notfound=();#@array だけにある要素
#1つのやり方
@ck{@cmp_array}=();
foreach $array_element (@array) {
push(@notfound, $array_element) unless exists $ck{$array_element};
}
print join(",",@notfound);#結果の表示
No.4
- 回答日時:
#1>全ての数が表示されてしまいました。
ウチでは、
1,2,3,4
になりますけど・
すいません。
非共通要素を探す前に
共通要素を調べていた為かうまく表示がされなかっただけのようです。よく確かめずにコメントしてしまい、すみませんでした。
今はきちんと表示されています。ご回答 ありがとうございました。
No.3
- 回答日時:
2つめの foreach の配列名が、間違っていますよ。
@array ではなく @cmp_array でしょう。次の部分には、問題があります。
if ($array_element != $cmp_array_element) {
push @notfound, $array_element;
}
上のようにしてしまうと、@cmp_array の1つの要素と違うたびに $array_element を @notfound に入れてしまうことになります。非共通要素を抜き出すためには、@cmp_array のすべての要素と比較して、同じものがないときだけ @notfound に入れるようにしなければいけません。元のコードを生かして、直してみましたので参考にしてください。
OUT: foreach $array_element (@array) {
foreach $cmp_array_element (@cmp_array) {
next OUT if $array_element == $cmp_array_element;
}
push @notfound, $array_element;
}
この回答への補足
2行目はタイプミスしました。すいません。
これもうまく働きません。
共通要素がある時に保存するようになっています。
if文がどうも違っているようです。
$array_element == $cmp_array_element;
を
$array_element != $cmp_array_element;
と直して使ってみましたが
arrayに含まれる全ての数字が表示されてしまいます。
No.2
- 回答日時:
まあ #1 と同じですが
%ck = ();
$ck{$_} = 1 for @array;
$ck{$_} = 0 for @cmp_array;
@notfound = grep { $ck{$_} == 1 } keys %ck;
とか. delete を使うともっとシンプルかもしれない.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 3 2022/10/27 17:44
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 1 2022/10/27 14:21
- PHP ファイルの書き込みについて教えて下さい。 1 2023/03/20 12:01
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/02/07 09:58
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/03/02 08:40
- PHP ランキングを表示する際の画像の大きさを固定することは可能でしょうか? <?php if ( has_ 1 2022/07/21 14:55
- PHP SQLとPHPの連結方法がわからないのでアドバイスお願い致します 1 2022/07/12 12:16
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/03/07 14:05
- JavaScript java keyを配列で表記したい 10 2022/12/01 17:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
perlで2つの配列を比較する方...
-
組み合わせを作るアルゴリズム
-
どなたかこのプログラミングを...
-
多次元配列から重複を削除
-
VBA for i=1 to lastrow
-
画面を強制的に再描画させる方法
-
C言語について。
-
vb.netからエクセル関数書き込み
-
まったく同じファイルのハッシ...
-
vb.netです。2次元配列の要素を...
-
プログラミングについて。 1つ...
-
DoEventsが必要な理由について
-
流れ図(フローチャート)が分か...
-
VBAでの一時停止と再開の方法
-
VBAのautofilter、criteriaの配...
-
perlで2次元配列をサブルーチ...
-
Escキーを押すと、中断する時と...
-
範囲指定したセルを1つずつ飛...
-
GIFアニメをループさせたくない
-
ループ内での条件処理
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
データベースから取得したデー...
-
perlで2つの配列を比較する方...
-
DBIを使ってのデータの取り出し...
-
python質問
-
perlでファイルの拡張子を除い...
-
grep関数を用いた複数行からの抽出
-
アルファベットn文字の組み合わ...
-
半角文字の縦書き表示
-
乱数と順列と組み合わせ
-
配列やハッシュで中身が同じか...
-
桁数指定と四捨五入
-
ループ中でのmy宣言と処理速度
-
画面を強制的に再描画させる方法
-
VBAで3秒だけ時間を止めたい
-
VBAでの一時停止と再開の方法
-
VBのReturnの使い方
-
どなたかこのプログラミングを...
-
Escキーを押すと、中断する時と...
-
UWSCの終了の仕方
-
エクセルの当番表を作っていま...
おすすめ情報