私はPerlでのプログラミングだ、と私は、このような@contents
として、私は、このような@contents=(A,S,D,F,M,E)
として配列を持っていると私は2つの新しい要素X
とY
持つ要素M
を交換したいような状況にいるよ(A,S,D,F,X,Y,E)
に等しくなります。配列の要素をその値に基づいて置き換えることはできますか?要素番号ではなく配列の2つの新しい要素を置き換える方法はありますか?
答えて
map
を使用できます。
@contents = map { $_ eq 'M' ? ('X','Y') : $_ } @contents;
それとも、splice
を使用することができます。
for (0 .. $#contents) {
if ($contents[$_] eq 'M') {
splice @contents, $_, 1, 'X', 'Y';
}
}
あなたはperlのバージョン5.12およびアップを使用している場合にも、インデックスのリストとしてkeys @contents
を使用することにより、さらに簡素化することができます。
'keys @ contents'は5.12以降のPerlでのみ動作するという注意を追加する必要があります。 –
@BradGilbert追加されました。とてもシンプルに見える便利な機能の多くには、これらのばかげたメモが必要です。 – TLP
それはまだそれほど新しいので、それだけです。 [5.6](http://perldoc.perl.org/perl56delta.html)に追加されたものがありました。 ['our'](http://perldoc.perl.org/perl56delta.html#%22our%22-declarations)、[3 arg' open'](http://perldoc.perl.org/perl56delta.html)のように#open() - 2つ以上の引数付き)、['binmode fh、 ':crlf''](http://perldoc.perl.org/perl56delta.html#binmode()-can-be) %3acrlf-and-%3araw-modes)を使用します。 –
あなたが探しているコマンドはspliceです。
#!/usr/bin/perl -wT
use strict;
my @contents = qw(A S D F M E);
my $match = 'M';
my @replace = qw(X Y);
my $arrlen = @contents;
for (my $i = 0; $i < $arrlen; $i++)
{
if ($contents[$i] eq $match)
{
splice (@contents, $i, 1, @replace);
last;
}
}
print "$_\n" foreach (@contents);
いくつかのヒント: 'use warnings'は、レキシカルスコープが可能なので、推奨プラグマです。ループにはperlスタイルを使用します(例: 'my $ arrlen = $#contents; Cスタイルforループの代わりに私の$ i(0 .. $ arrlen)... 'のために。なぜ汚れチェックをしていますか? 'last'を使うとマッチの最初のオカレンスだけを置き換えます。 [say](http://perldoc.perl.org/functions/say.html)を調べることに興味があるかもしれません。 'say for @ contents'はかなり良く見えます。ただし、厳密と警告の両方を使用する場合は+1してください。 – TLP
私のコードを見ていただきありがとうございます。私の意図は、Perlに慣れていない人から聞いた最も一般的な苦情は、あいまいな構文なので、コードを読みやすく、perlに慣れていない人のために消化しやすくすることでした。 Potatoe、potatoe、そう思います。私は元の投稿のサンプルコードが2回以上一致する必要があることを示していないので(元の配列の1 'M'のみ)、ループから脱出するために 'last'を使用しています。そうでない場合は、「最後」の文を削除することをお勧めします。 –
あなたがそれを知らないのはあいまいです。私は自分の英語を読むことができるより多くの人々のperlをよく読むことができることを知ります。 =) – TLP
- 1. 配列スライスとスプライスを使用して配列要素を置き換える方法は?
- 2. 要素をlxml.htmlに置き換える
- 3. C#で複数の文字列要素を置き換える
- 4. ArrayAdapterのすべての要素を置き換える方法
- 5. 要素名を文字列に置き換えます。
- 6. jqueryバインドが必要ですか? (要素の置き換え)
- 7. 列iにある行列/データフレームの値をベクトルのi番目の要素に置き換えます。
- 8. HTMLテーブルのtd要素を別のtd要素に置き換えることは可能ですか?
- 9. Knockout.js observableArrayのすべての要素を置き換えます。
- 10. ハッシュ値を持つ配列要素を置換する
- 11. innerHTMLではなく要素全体を置き換えますか?
- 12. 異なるHTMLファイルのある要素から別の要素にhtmlを置き換えます。
- 13. 要素を置き換えるにはどうすればいいですか?
- 14. 文書の2つの配列要素に基づいて文書を返す方法はありますか?
- 15. Pythonの2つの配列要素の交換位置
- 16. 特定のGUI要素を動的に置き換えます。
- 17. 要素をng-transcludeに置き換える方法
- 18. 要素を配列に配置する
- 19. VaadinのUI要素のスタイル(例:テーブル)の置き換え方法
- 20. 配列要素の配列要素をJavaで配列する
- 21. 2dリスト内の要素を置き換えます
- 22. 分割要素を配列に配置する方法は?
- 23. 行列の行の最初のゼロ要素を置き換えます。
- 24. インデックスのリストに基づいてベクトルの複数の要素を置き換える方法
- 25. Java ArrayList.add()はarrayのすべての要素を最終要素に置き換えます
- 26. 文字列の個々の文字要素を置き換えますC
- 27. 要素をcufonに置き換えるのを除外しますか?
- 28. Javascriptを使用してDOM要素を置き換える方法はありますか?
- 29. 要素の値をコンパイル済みのHTMLに置き換えるには
- 30. JQuery mobile:サムネイルをデータ要素に置き換えます。
「M」の出現をすべて置き換えたいのですか、最初のものだけを置き換えたいのですか、または1つしかないと仮定するのに満足できますか? –
@Woodyあなたがあなたの質問に答えたと思ったら、その左側のチェックマークをクリックして答えの一つを受け入れることを検討してください。 – TLP