質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

Q&A

2回答

1572閲覧

Perlの配列同士の比較

Perl

総合スコア1

Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

0グッド

0クリップ

投稿2022/05/19 14:51

Perl初学者です。

Aの配列とBの配列の要素がマッチしているかを確認するにはどうしたら良いですか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2022/05/19 15:00

何を確認するんでしょうか? 二つの配列の長さが同じで、前から順に比較してすべての要素が一致したときにマッチしたと考えればいいですか?
Perl

2022/05/19 15:11

言葉足らずですみません。 複数ある配列の中の文字列同士がマッチしているかどうかを調べるにはどうしたら良いでしょうか?
Zuishin

2022/05/19 15:19

私の書いたことを書き換えたということは、違っているということでしょうか? 違いを教えてください。 特にマッチの意味がわかりません。
Perl

2022/05/19 15:24

Aの配列に格納されている文字列とBに格納されている文字列の中に同じ文字列があるか調べるにはどうしたら良いでしょうか?
Zuishin

2022/05/19 15:27 編集

まず A の配列と B の配列の具体例を書き、その中のどれがどうなればいいのかを書いてください。 「同じ文字列があるか」と、「すべて同じ文字列なのか」では、まったく意味が違います。
Perl

2022/05/19 15:42

@a=("gjm","ptw","dmw"); @b=("gjm","ajt","dmw"); 同じ文字列があるかを確認して@aだけにあった文字列と@bの中にだけあった文字列をそれぞれ別の配列に格納したい
Zuishin

2022/05/19 15:46

1. つまり、「A の配列と B の配列の要素がマッチしているかを確認する」というのは、その二つの配列から ("gjm","dmw") を作るということですか? 2. 次の場合にはどうなればマッチしたことになりますか? @a=("dmw","ptw","gjm"); @b=("gjm","ajt","dmw"); 3. 次の場合にはどうなればマッチしたことになりますか? @a=("dmw","dmw","dmw"); @b=("gjm","ajt","dmw"); 以上三点、お願いします。
Perl

2022/05/19 15:57

1 Aの配列の中にありBの中に無かったptwを新しいCの配列に格納したい Bの配列の中にありAの中に無かったajtを新しいDの配列に格納したい 2 格納している配列の順番は関係なく違う文字列だけを1の様な処理をしたい 3 今回は1つの配列に別の文字列が入っている事を想定しています。
Zuishin

2022/05/19 16:10

理解できました。
Perl

2022/05/19 16:15

すみません 日本語すら言語化出来ていないのでプログラミングも上達しないのだと思います。 恥を忍んで伺いたいのですが あと1ヶ月以内にはこの程度の事は楽に出来なきゃならないのにどう勉強すれば良いでしょうか?
Zuishin

2022/05/19 16:17 編集

ではまず A の配列の要素をすべて新しい配列 C に入れてください。 次に B の配列の要素を順に見ていき、C の配列から探してください。 https://www.koikikukan.com/archives/2015/01/22-005555.php そして探し出したものを削除してください。 https://www.javadrive.jp/perlfunc/array/index5.html これで A の配列の中にあり、B の中に無かったものが C の配列になります。 A と B を変えて同じことをすれば、配列 D もできます。
Zuishin

2022/05/19 16:19

> あと1ヶ月以内にはこの程度の事は楽に出来なきゃならないのにどう勉強すれば良いでしょうか? 問題に取り掛かるより先に、入門書を終えてください。 それが一番の近道ですが、時間的に少し厳しいようなので、本腰を入れて時間を作らなければいけないと思います。
Perl

2022/05/19 16:20

ご丁寧にありがとうございます 頑張ります
guest

回答2

0

ハッシュ(連想配列)を用いて「あるなし表」を作るのが素直でいいでしょう。

use strict; use warnings; # テストデータ my @a = qw(gjm ptw dmw); my @b = qw(gjm ajt dmw); # あるなし表 my %check; foreach my $x (@a){ $check{$x}{a}=1; } foreach my $x (@b){ $check{$x}{b}=1; } # あるなし表→最終結果 my @c; my @d; foreach my $x (keys %check){ ($check{$x}{a} and not $check{$x}{b}) and push(@c, $x); (not $check{$x}{a} and $check{$x}{b}) and push(@d, $x); } print join(' ', @c), "\n"; print join(' ', @d), "\n";

投稿2022/05/23 19:46

KojiDoi

総合スコア13671

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Array::Utils - small utils for array manipulation を利用する場合。

perl

1use Array::Utils qw(:all); 2use feature qw(say); 3 4my @a = qw(gjm ptw dmw); 5my @b = qw(gjm ajt dmw); 6 7my @only_a = array_minus(@a, @b); 8my @only_b = array_minus(@b, @a); 9 10say join(", ", @only_a); 11say join(", ", @only_b); 12 13# 14ptw 15ajt

投稿2022/05/19 16:47

melian

総合スコア19771

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問