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ランキング
-
乱数と順列と組み合わせ
-
grep関数を用いた複数行からの抽出
-
半角文字の縦書き表示
-
画面を強制的に再描画させる方法
-
VBAのautofilter、criteriaの配...
-
VBAで3秒だけ時間を止めたい
-
vba
-
リストボックスに縦スクロール...
-
二次元配列のインデックスについて
-
二次元配列における要素数のは...
-
Escキーを押すと、中断する時と...
-
perlで2次元配列をサブルーチ...
-
DoEventsが必要な理由について
-
ということですか 他に固定りよ...
-
DOSコマンドのループ内のTIMEコ...
-
Application.OnTime の使い方
-
Visual BasicのUserFormが閉じ...
-
流れ図(フローチャート)が分か...
-
可変長配列を、動的確保した固...
-
ListBox 複数選択 で オートフ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
perlでファイルの拡張子を除い...
-
python質問
-
DBIを使ってのデータの取り出し...
-
grep関数を用いた複数行からの抽出
-
データベースから取得したデー...
-
配列内定義サブルーチン呼び出し
-
C言語の関数ポインタのイメージ...
-
桁数指定と四捨五入
-
アルファベットn文字の組み合わ...
-
index関数で複数個抜き出す
-
Perl 戻り値の型の判定って出来...
-
二桁の数字からなる配列数10...
-
サブルーチンと繰り返し処理を...
-
ソート時同じ値がある場合、表...
-
ファイルの最後の行から表示さ...
-
半角文字の縦書き表示
-
配列やハッシュで中身が同じか...
-
乱数と順列と組み合わせ
-
ハッシュ内の各値部分に配列を...
-
正規表現に関する質問
おすすめ情報