私は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. 配列の要素をjavacriptの異なる番号に置き換えます。
- 2. jQuery:要素を他の要素に置き換えますか?
- 3. jqueryは配列の要素を文字列で置き換えます。
- 4. numpy配列で1d numpy配列の要素を置き換えます
- 5. 要素をかみそりのテキストエリアに置き換えます
- 6. 配列要素を検索し、MATLABの列を置き換えます
- 7. 配列の要素の文字列を別の配列の要素の文字列に置き換えるにはどうすればよいですか?
- 8. 配列の要素の値を同じ配列の別の要素に置き換えるにはどうすればよいですか?
- 9. ElementTreeの要素を置き換えます(要素をパラレル要素にネスト)
- 10. 要素をJavaScriptで置き換える
- 11. MongoDBのサブ配列要素を検索して置き換えます
- 12. 要素のリストからhtml要素を置き換えてください
- 13. 左要素に基づいてオフセット付き右要素の配置方法
- 14. 行列のいくつかの要素を新しい値に置き換えます。bash
- 15. 配列スライスとスプライスを使用して配列要素を置き換える方法は?
- 16. 要素をlxml.htmlに置き換える
- 17. RxJava:要素のサブシーケンスを1つの要素に置き換えます。
- 18. 準備されたステートメントプレースホルダーをPHPの配列要素に置き換えます。
- 19. ArrayAdapterのすべての要素を置き換える方法
- 20. C#で複数の文字列要素を置き換える
- 21. 配列値を配列値に置き換える方法[2配列あり]
- 22. 行列のすべての要素を逆行列で置き換えます。
- 23. jqueryバインドが必要ですか? (要素の置き換え)
- 24. ベース行列の要素を2乗順列サブ行列で置き換える
- 25. 要素名を文字列に置き換えます。
- 26. Pythonのリストのリストで値を要素に置き換える方法は?
- 27. img要素を非常に似たgif要素で置き換える方法
- 28. HTMLテーブルのtd要素を別のtd要素に置き換えることは可能ですか?
- 29. jQuery:要素を新しい要素に置き換え、新しい要素のみを表示するにはどうすればいいですか?
- 30. DOM要素を別の要素に置き換えるにはどうすればいいですか?
「M」の出現をすべて置き換えたいのですか、最初のものだけを置き換えたいのですか、または1つしかないと仮定するのに満足できますか? –
@Woodyあなたがあなたの質問に答えたと思ったら、その左側のチェックマークをクリックして答えの一つを受け入れることを検討してください。 – TLP