-PR-
解決
済み

配列の要素を結合する方法

  • 暇なときにでも
  • 質問No.75471
  • 閲覧数88
  • ありがとう数4
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 76% (30/39)

すごく基本的なことで恥ずかしいのですが、
条件を満たす配列の要素を結合し、元の配列に返す方法がわかりません。

foreach $aa (@aa) {
if ($aa =~ /-/){

}
}
とまでは考えたのですが・・・
どなたかお分かりの方、よろしくおねがいします。
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.3
レベル10

ベストアンサー率 64% (73/113)

ああ、そういうことをおやりになりたかったんですか。
もちろん、「[」が出てきたときに一時変数に入れ、「]」が
出てきたときにまとめてpushして次の要素に備える…でも
できますね。練習としてチャレンジしてみてもよろしいでしょう。

別解として、私なら
@aa = (join('', @aa) =~ /\[.*?\]/g);
ですかね。
ちょっと古いPerlなら
@aa = (join('', @aa) =~ /\[[^\]]*\]/g);
かな。わざと1行で書いてみました。解説が必要なら遠慮なく
おっしゃってください。しかしいろんな書き方ができますねえ、
Perlは。まさにThere Is More Than One Way To Do Itですな。
お礼コメント
8kotaro

お礼率 76% (30/39)

無理やりやったらなんとか出来ました(^^;
修正は来週の土日まで持越しです。
こんなのでもプログラミングができるなんて、
ほんとTIMTOWTDIのおかげですね。
投稿日時 - 2001-05-13 23:49:34
-PR-
-PR-

その他の回答 (全2件)

  • 回答No.1
レベル10

ベストアンサー率 64% (73/113)

ええと、結合というのがよくわかりませんが、それは @aa = ('aaa', 'abc-d', 'sss', 'xx-yy', 'z-'); だったとき @aa = ('abc-d', 'xx-yy', 'z-'); と/-/にマッチするも ...続きを読む
ええと、結合というのがよくわかりませんが、それは
@aa = ('aaa', 'abc-d', 'sss', 'xx-yy', 'z-');
だったとき
@aa = ('abc-d', 'xx-yy', 'z-');
と/-/にマッチするものだけにしたい、という意味でしょうか?

ならば、別の配列を用意してそこに条件が合ったものだけコピーして、
最後に元の配列にまるごと移すようにするのはどうでしょう。

foreach $aa (@aa) {
if ($aa =~ /-/) {
push(@bb, $aa);
}
}
@aa = @bb;

なお、これと同じことを1行で書けるgrepというものがあります。
@aa = grep {/-/} @aa;
どちらでもお好きなほうをどうぞ。

もしお使いの本にgrepの解説がないのなら、それはかなり昔の書物なので
廃棄しても基本的に問題ありません。
補足コメント
8kotaro

お礼率 76% (30/39)

回答ありがとうございます。
説明不足で申し訳ありません。

具体的にいうと、
@aa = ('[abc', 'def]', '[ghi]', '[jkl', 'nmo', 'pqr]');

@aa = ('[abcdef]', '[ghi]', '[jklnmopqr]');
にしたいのです。
投稿日時 - 2001-05-13 19:23:26


  • 回答No.2
レベル10

ベストアンサー率 64% (73/113)

または、条件を満たすものを文字列として「結合」させ、 満たさない要素はそのままコピーする、というのなら foreach $aa (@aa) { if ($aa =~ /-/) { $tmp .= $aa; } else { push(@bb, $aa); } } push(@bb, $tmp); などのやりかたがありますね。文字列結合して貯めていた$tmp ...続きを読む
または、条件を満たすものを文字列として「結合」させ、
満たさない要素はそのままコピーする、というのなら
foreach $aa (@aa) {
if ($aa =~ /-/) {
$tmp .= $aa;
} else {
push(@bb, $aa);
}
}
push(@bb, $tmp);
などのやりかたがありますね。文字列結合して貯めていた$tmp
を最後に@bbの末尾要素として付け加える方法です。

[余談]
これこれこういうデータが、最終的にこうなってほしい、と
はっきり書いてあるとすごくわかりやすい質問となると思いますよ。
お礼コメント
8kotaro

お礼率 76% (30/39)

すばやい回答ありがとうございます。
pushを使ってできそうですので、考えてみます。
投稿日時 - 2001-05-13 19:44:35
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ