- ベストアンサー
配列の要素を結合する方法
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ああ、そういうことをおやりになりたかったんですか。 もちろん、「[」が出てきたときに一時変数に入れ、「]」が 出てきたときにまとめてpushして次の要素に備える…でも できますね。練習としてチャレンジしてみてもよろしいでしょう。 別解として、私なら @aa = (join('', @aa) =~ /\[.*?\]/g); ですかね。 ちょっと古いPerlなら @aa = (join('', @aa) =~ /\[[^\]]*\]/g); かな。わざと1行で書いてみました。解説が必要なら遠慮なく おっしゃってください。しかしいろんな書き方ができますねえ、 Perlは。まさにThere Is More Than One Way To Do Itですな。
その他の回答 (2)
- Head_Syndicate
- ベストアンサー率64% (73/113)
または、条件を満たすものを文字列として「結合」させ、 満たさない要素はそのままコピーする、というのなら foreach $aa (@aa) { if ($aa =~ /-/) { $tmp .= $aa; } else { push(@bb, $aa); } } push(@bb, $tmp); などのやりかたがありますね。文字列結合して貯めていた$tmp を最後に@bbの末尾要素として付け加える方法です。 [余談] これこれこういうデータが、最終的にこうなってほしい、と はっきり書いてあるとすごくわかりやすい質問となると思いますよ。
お礼
すばやい回答ありがとうございます。 pushを使ってできそうですので、考えてみます。
- Head_Syndicate
- ベストアンサー率64% (73/113)
ええと、結合というのがよくわかりませんが、それは @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の解説がないのなら、それはかなり昔の書物なので 廃棄しても基本的に問題ありません。
補足
回答ありがとうございます。 説明不足で申し訳ありません。 具体的にいうと、 @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
- 配列を回すとき、最後の要素だけ違う処理をしたい
hoge[0]に対して、配列の中身を処理して, 最後にカンマを付与 hoge[1]に対して、配列の中身を処理して, 最後にカンマを付与 hoge[2]に対して、配列の中身を処理して, 最後にカンマを付与 hoge[3]に対して、配列の中身を処理して, 最後にカンマを付与しない というようなことをするとき、 どう書けばよいでしょうか? for ($i = 0 ; $i <count($hoge); $i++) { if($i< count($hoge)-1){ //配列の要素が最後じゃないのに対する処理 .","; }else{ //配列の要素が最後のに対する処理 } } ってしたら、とりあえず、動いたのですが、 普通はどういう風に書くのでしょうか? foreachとか、あるいは、配列の最後に対してする何か 書き方ってあるのでしょうか
- ベストアンサー
- PHP
- 二つの配列の要素を比べる方法がわかりません
いつもお世話になっています。 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次元配列にしたいのですがやりかたがわかりません。
- 締切済み
- Ruby
- 配列の要素数について
下記の記述の場合、配列の要素数っていくつになりますか? Dim strArray() As String ReDim strArray(0) また下記のように、配列の要素数を具体的に書かずに使った場合不具合はでますか? Dim strArray() As String strArray(0) = "aa" strArray(1) = "bb"
- ベストアンサー
- Visual Basic
- 配列の要素数を調べる方法
配列の中にいくつ要素があるか後から調べる方法はあるでしょうか? 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[] = { "ああああああ", "いいいいいい", "うううううう", ・ ・ //(これは文字列の数を要素数とします) } ; のように宣言された二次元配列などで、後から配列内にいくつ要素があるかを 調べることなどは可能でしょうか?
- ベストアンサー
- C・C++・C#
- 参照配列の要素数の求め方は?
リファレンス配列の要素数は、$#では求められないのでしょうか? ------------------------------------- foreach $i(0 .. 3){ $hash->[$i] = $i * 100; } print "\%hashの要素数->$#hash\n"; $ref = \%hash; print "\%{$ref}の要素数->$#{$ref}\n"; -------------------------------------
- ベストアンサー
- Perl
お礼
無理やりやったらなんとか出来ました(^^; 修正は来週の土日まで持越しです。 こんなのでもプログラミングができるなんて、 ほんとTIMTOWTDIのおかげですね。