• ベストアンサー

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

すごく基本的なことで恥ずかしいのですが、 条件を満たす配列の要素を結合し、元の配列に返す方法がわかりません。 foreach $aa (@aa) { if ($aa =~ /-/){ } } とまでは考えたのですが・・・ どなたかお分かりの方、よろしくおねがいします。

  • Perl
  • 回答数3
  • ありがとう数4

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

  • ベストアンサー
回答No.3

ああ、そういうことをおやりになりたかったんですか。 もちろん、「[」が出てきたときに一時変数に入れ、「]」が 出てきたときにまとめてpushして次の要素に備える…でも できますね。練習としてチャレンジしてみてもよろしいでしょう。 別解として、私なら @aa = (join('', @aa) =~ /\[.*?\]/g); ですかね。 ちょっと古いPerlなら @aa = (join('', @aa) =~ /\[[^\]]*\]/g); かな。わざと1行で書いてみました。解説が必要なら遠慮なく おっしゃってください。しかしいろんな書き方ができますねえ、 Perlは。まさにThere Is More Than One Way To Do Itですな。

8kotaro
質問者

お礼

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

その他の回答 (2)

回答No.2

または、条件を満たすものを文字列として「結合」させ、 満たさない要素はそのままコピーする、というのなら foreach $aa (@aa) { if ($aa =~ /-/) { $tmp .= $aa; } else { push(@bb, $aa); } } push(@bb, $tmp); などのやりかたがありますね。文字列結合して貯めていた$tmp を最後に@bbの末尾要素として付け加える方法です。 [余談] これこれこういうデータが、最終的にこうなってほしい、と はっきり書いてあるとすごくわかりやすい質問となると思いますよ。

8kotaro
質問者

お礼

すばやい回答ありがとうございます。 pushを使ってできそうですので、考えてみます。

回答No.1

ええと、結合というのがよくわかりませんが、それは @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
質問者

補足

回答ありがとうございます。 説明不足で申し訳ありません。 具体的にいうと、 @aa = ('[abc', 'def]', '[ghi]', '[jkl', 'nmo', 'pqr]'); を @aa = ('[abcdef]', '[ghi]', '[jklnmopqr]'); にしたいのです。

関連するQ&A

  • 配列の要素の結合について

    下記の(変更前)から(変更後)のように配列の要素を結合し、 結合後の要素の数は減らしたいと思っています。 関数などを調べたですが、なかなか実現できない状況です。 ご教授いただければと思います。 よろしくお願いします。 (変更前) array(4) { [0]=>"郵便番号" [1]=>"東京都" [2]=>"大田区" [3]=>"氏名" (変更後) array(3) { [0]=>"郵便番号" [1]=>"東京都大田区" [2]=>"氏名"

    • ベストアンサー
    • PHP
  • 配列の各要素に結合

    @tangoa = ('A','B','C','D','E','F'); @tangob = ('K','L','M','N','O','P'); の2つの配列の各要素を結合させて AK AL AM AN AO AP BK BL BM BN BO BP CK CL CM CN CO CP DK DL DM DN DO DP EK EL EM EN EO EP FK FL FM FN FO FPという配列(@tangoc)を作りたいのですが、 2つの配列の各要素を結合させるにはmapを用いてどのように書くべきか具体的に教えてください。

    • ベストアンサー
    • Perl
  • 配列を回すとき、最後の要素だけ違う処理をしたい

    hoge[0]に対して、配列の中身を処理して, 最後にカンマを付与 hoge[1]に対して、配列の中身を処理して, 最後にカンマを付与 hoge[2]に対して、配列の中身を処理して, 最後にカンマを付与 hoge[3]に対して、配列の中身を処理して, 最後にカンマを付与しない というようなことをするとき、 どう書けばよいでしょうか? for ($i = 0 ; $i <count($hoge); $i++) {   if($i< count($hoge)-1){    //配列の要素が最後じゃないのに対する処理     .",";  }else{    //配列の要素が最後のに対する処理  } } ってしたら、とりあえず、動いたのですが、 普通はどういう風に書くのでしょうか? foreachとか、あるいは、配列の最後に対してする何か 書き方ってあるのでしょうか

    • ベストアンサー
    • PHP
  • 配列要素の並べ替え

    $Res[$i]という配列に、数字の要素が入っているんですが、それを昇順で並べ替えして要素の間に/を入れたいのですが、 foreach (sort {$a cmp $b} keys %Res) { $Res2 = $Res[$i] + "/" } どうもこの記述では上手くいかないので、どなたか教えて下さい!!

    • ベストアンサー
    • Perl
  • 二つの配列の要素を比べる方法がわかりません

    いつもお世話になっています。 n行3列の配列のVectorが二つあります。 その同じ行と列に対応する要素どうしを比較する ためにVectorから値を取得したいのですが、その 方法がわかりません。 なんとなくtoArrayというメソッドを使うんじゃないのかなあという気はしてるんですが…。 ちなみにVectorにaddするときは、1行3列のString型の配列をaddしています。 Vectorの配列から要素を取り出す方法をご存知の方が いらっしゃいましたら、ご教授ください。

    • ベストアンサー
    • Java
  • 2次元配列から条件抽出した要素の操作

    ある2次元配列から条件に合う要素だけ抜き出し、 抜き出した要素でまた2次元配列を作りたいのですがうまくいきません。 ary=[[3,7,5,6,],[4,7,3,9],[2,5,3,7],[8,1,4,3]] ary.each{|x| if x[1]>3 p x end } というかんじで条件抽出しているのですが、 ここで得た出力をまた [[4,7,3,9],[8,1,4,3]] というような2次元配列にしたいのですがやりかたがわかりません。

  • 配列の要素数について

    下記の記述の場合、配列の要素数っていくつになりますか? Dim strArray() As String ReDim strArray(0) また下記のように、配列の要素数を具体的に書かずに使った場合不具合はでますか? Dim strArray() As String strArray(0) = "aa" strArray(1) = "bb"

  • 配列

    以下のコードの用に配列内に入っている要素をif文の「(array[i] == AA)」みたいに直接判定するのは不可能なのでしょうか?よろしくお願いいたします。 String[] array = {"AA","BB","CC"}; for(int i = 0;i < array.length;i++) {  if(array[i] == AA) //ここの部分

    • ベストアンサー
    • Java
  • 配列の要素数を調べる方法

    配列の中にいくつ要素があるか後から調べる方法はあるでしょうか? int test[4][3] = {   {0,1,2},   {0,1,2},   {0,1,2},   {0,1,2}, } ; 上のケースだと、X方向に3、Y方向に4つの 要素があります。しかし、これだとあらかじめいくつ要素があるかを決めて 置かないといけません。 例えば、 int test[] = {0,1,2,3....} みたいに宣言された場合や、 char *test[] = {   "ああああああ",   "いいいいいい",   "うううううう",      ・      ・ //(これは文字列の数を要素数とします) } ; のように宣言された二次元配列などで、後から配列内にいくつ要素があるかを 調べることなどは可能でしょうか?

  • 参照配列の要素数の求め方は?

    リファレンス配列の要素数は、$#では求められないのでしょうか? ------------------------------------- foreach $i(0 .. 3){ $hash->[$i] = $i * 100; } print "\%hashの要素数->$#hash\n"; $ref = \%hash; print "\%{$ref}の要素数->$#{$ref}\n"; -------------------------------------

    • ベストアンサー
    • Perl

専門家に質問してみよう