Perl配列の一意の要素を印刷するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/439647

  •  22-07-2019
  •  | 
  •  

質問

whileステートメントの間に要素を配列にプッシュしています。各要素は教師の名前です。ループが終了すると、配列内で教師名が重複します。配列内で隣接していない場合もあれば、隣接している場合もあります。

値のプッシュが完了した後、その配列の一意の値のみを印刷するにはどうすればよいですか?要素を出力するたびに配列全体を解析する必要はありません。

すべてが配列にプッシュされた後のコードは次のとおりです。

$faculty_len = @faculty;
$i=0;
while ($i != $faculty_len)
{
        printf $fh '"'.$faculty[$i].'"';
        $i++;
}   
役に立ちましたか?

解決

use List::MoreUtils qw/ uniq /;
my @unique = uniq @faculty;
foreach ( @unique ) {
    print <*>, "\n";
}

他のヒント

ハッシュにプッシュすることをお勧めします。 このように:

my %faculty_hash = ();
foreach my $facs (@faculty) {
  $faculty_hash{$facs} = 1;
}
my @faculty_unique = keys(%faculty_hash);
@array1 = ("abc", "def", "abc", "def", "abc", "def", "abc", "def", "xyz");

@array1 = grep { ! $seen{ <*> }++ } @array1;

print "@array1\n"; 

この質問は、perldocの複数のソリューションで回答されています。コマンドラインで入力するだけです:

perldoc -q duplicate

注意:ハッシュを含む回答の一部は、配列の順序を変更します。ハッシュにはどんな種類の順序もありませんので、キーまたは値を取得すると、順序が未定義のリストが作成されます。

これは、 grep {! $ seen {$ _} ++} @faculty

これは、一意の行を表示順に印刷する1行のコマンドです。

perl -ne '$seen{

これは、一意の行を表示順に印刷する1行のコマンドです。

<*>}++ || print

これは、一意の行を表示順に印刷する1行のコマンドです。

<*>' fileWithDuplicateValues

ハックニー3ライナーを見つけました。楽しんでください

my %uniq; 
undef @uniq(@non_uniq_array); 
my @uniq_array = keys %uniq; 

何らかの方法で教員リストを処理する必要がある場合は、キーの合体およびキーのソートのためにハッシュに変換された配列上のマップが別の良い方法です:

my @deduped = sort keys %{{ map { /.*/? (

何らかの方法で教員リストを処理する必要がある場合は、キーの合体およびキーのソートのためにハッシュに変換された配列上のマップが別の良い方法です:

my @deduped = sort keys %{{ map {/.*/? do{s/\.//g; (

何らかの方法で教員リストを処理する必要がある場合は、キーの合体およびキーのソートのためにハッシュに変換された配列上のマップが別の良い方法です:

my @deduped = sort keys %{{ map { /.*/? (

何らかの方法で教員リストを処理する必要がある場合は、キーの合体およびキーのソートのためにハッシュに変換された配列上のマップが別の良い方法です:

my @deduped = sort keys { map { /.*/? (s/\.//gr,1):() } @faculty };

選択に応じて /.*/ 正規表現を変更してリストを処理します。それに応じて、パスごとに1つ以上の変更された一意でないキーを出力できます。 ($ _、1):()任意に複雑。

置換正規表現を使用して実行中のデータを変更する必要がある場合、名前( s /\.// g )からドットを削除するなど、上記のパターンによる置換 $ _ エイリアシングにより、元の @faculty 配列を変更します。 @faculty 配列の匿名コピーを作成することで、 $ _ エイリアスを回避できます(いわゆる&quot; baby cart&quot; operator ):

<*>

Perlの最新バージョンでは、 keys にハッシュ参照を渡すことができ、非破壊的な置換を使用できます:

<*>

それ以外の場合は、他の場所での grep または $ seen [$ _] ++ ソリューションが望ましい場合があります。

,1):() } @faculty }}; print join("\n", @deduped)."\n";

選択に応じて /.*/ 正規表現を変更してリストを処理します。それに応じて、パスごとに1つ以上の変更された一意でないキーを出力できます。 ($ _、1):()任意に複雑。

置換正規表現を使用して実行中のデータを変更する必要がある場合、名前( s /\.// g )からドットを削除するなど、上記のパターンによる置換 $ _ エイリアシングにより、元の @faculty 配列を変更します。 @faculty 配列の匿名コピーを作成することで、 $ _ エイリアスを回避できます(いわゆる&quot; baby cart&quot; operator ):

<*>

Perlの最新バージョンでは、 keys にハッシュ参照を渡すことができ、非破壊的な置換を使用できます:

<*>

それ以外の場合は、他の場所での grep または $ seen [$ _] ++ ソリューションが望ましい場合があります。

,1)}:()} @{[ @faculty ]} }}; print join("\n", @deduped)."\n"; print "Unmolested array:\n".join("\n", @faculty)."\n";

選択に応じて /.*/ 正規表現を変更してリストを処理します。それに応じて、パスごとに1つ以上の変更された一意でないキーを出力できます。 ($ _、1):()任意に複雑。

置換正規表現を使用して実行中のデータを変更する必要がある場合、名前( s /\.// g )からドットを削除するなど、上記のパターンによる置換 $ _ エイリアシングにより、元の @faculty 配列を変更します。 @faculty 配列の匿名コピーを作成することで、 $ _ エイリアスを回避できます(いわゆる&quot; baby cart&quot; operator ):

<*>

Perlの最新バージョンでは、 keys にハッシュ参照を渡すことができ、非破壊的な置換を使用できます:

<*>

それ以外の場合は、他の場所での grep または $ seen [$ _] ++ ソリューションが望ましい場合があります。

,1):() } @faculty }}; print join("\n", @deduped)."\n";

選択に応じて /.*/ 正規表現を変更してリストを処理します。それに応じて、パスごとに1つ以上の変更された一意でないキーを出力できます。 ($ _、1):()任意に複雑。

置換正規表現を使用して実行中のデータを変更する必要がある場合、名前( s /\.// g )からドットを削除するなど、上記のパターンによる置換 $ _ エイリアシングにより、元の @faculty 配列を変更します。 @faculty 配列の匿名コピーを作成することで、 $ _ エイリアスを回避できます(いわゆる&quot; baby cart&quot; operator ):

<*>

Perlの最新バージョンでは、 keys にハッシュ参照を渡すことができ、非破壊的な置換を使用できます:

<*>

それ以外の場合は、他の場所での grep または $ seen [$ _] ++ ソリューションが望ましい場合があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top