🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Perl

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

Q&A

解決済

1回答

2972閲覧

配列の要素の重複の取り出しについて

banianizm

総合スコア92

Perl

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

0グッド

1クリップ

投稿2019/11/16 13:05

お世話になります。

perlについて質問です。

配列[3 4 6 2 1 4 5]

という配列があった場合に重複する値、この場合だと4を抽出する場合に、どのような取り出し方があるのでしょうか?

私の勝手な考えですが、このような関数があるのかと考えましたが、どうでしょうか?

よろしくお願い致します。

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

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

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

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

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

takasima20

2019/11/16 15:10

汎用的には、ソート後に値と個数のタプルを作って処理する感じでしょうが、Perlなりのノウハウがあるみたいですねえ。
guest

回答1

0

ベストアンサー

重複値の取り出しでは、以下の様なコードが定番です。

my %s ; print grep $s{$_} ++, qw( 3 4 6 2 1 4 5 ) ; #4

%s に値をキャッシュして、$s{$}が定義されていれば($s{$}が1以上であれば)、grepされると言う単純なコードになっています。

後置++ は grep 評価の後に実行されるので、最初の1個目はスルー、2個目からが対象となります。

ちなみに、uniqにするのは

grep ! $s{$_} ++, qw( 3 4 6 2 1 4 5 ) ; # 346215

となります(こちらは、$s{$_}が未定義であれば、grep)。

3回同じものがある場合を抽出したければ、

grep $s{$_} ++ >=2 , qw( 3 4 6 2 1 4 5 4 ) ; # 4

と、応用が効きます。

投稿2019/11/16 14:31

編集2019/11/17 06:33
bunzaemon

総合スコア118

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問