1

繰り返し可能な文字列のリストがあるとします。文字列のリストに一意のエントリを保持する、このリストの並べ替えられたインデックスのリストを見つけようとしています。

例:

my @string_list = ("hello", "world", "hello", "how", "are", "world");

インデックスのリストを含む出力は次のようになります。[0, 1, 3, 4]これは、単語"hello""world""how"およびに対応します"are"

これを行うには、入力リストをループして、これらのインデックスを保持するディクショナリ内のリストで確認した要素を追跡し、後でこれらのインデックスを使用して一意のアイテムのリストを取得します。

しかし、Perl にこのタスクを容易にし、これをループで記述することを回避する組み込み関数、関数、またはデータ構造が他にないかどうか疑問に思っていました。

4

1 に答える 1

2

やりたいことは非常に一般的ではないため、そのような概念には組み込みはありません。ただし、それはほんの数行のコードです。

use strict;
use warnings;

my @string_list = qw( hello world hello how are world );

my @indices = do {
  my %seen;
  map { $seen{$string_list[$_]}++ ? () : ($_) } 0 .. $#string_list;
};

printf "[%s]\n", join ', ', @indices;

出力

[0, 1, 3, 4]
于 2012-09-16T19:21:47.357 に答える