質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

5回答

2446閲覧

rubyで以下のような配列の処理の対応方法を教えて欲しいです。 ["aaa,bbb,ccc", "sss,fff,vvv", "ttt,yyy,eee"]から文字を抽出

kento2543

総合スコア163

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2015/07/15 13:37

編集2022/01/12 10:55

以下のような配列があるとします。

内訳にあるように文字列が3つ毎にカンマで区切り、aaa といった言葉が3つ並んでおります。

こういう配列において 括弧や、カンマの特性を活かして、以下の3つの単語を抽出したいです。

1)aaa
2)fff
3)eee

もしこれらをrubyで実現しようとするとどうしたら宜しいでしょうか?(質問1)

["aaa,bbb,ccc", "sss,fff,vvv", "ttt,yyy,eee"] ※内訳 "aaa,bbb,ccc" "sss,fff,vvv" "ttt,yyy,eee"

また、今回は簡易的にするためにすべて、アルファベット3つで構成する単語を3つで一つの括弧に含めましたが、アルファベット3つで構成する単語とは限らず、また、3つで一つの括弧に含めないような並びの場合でもできるのか教えて欲しいです。(質問2)
※以下のような配列です。

["adaa,bbb,cdcc,addaa", "sss,assaa,fff,vvv", "tthhht,yhhhyy,eyyyuee"]

宜しくお願いします。

追記

上記はotnさんの回答で解決致しました。

また、追加で大変恐縮ですが、
以下のような文字列から括弧の一つ目の文字列の抽出をしたいのですが、
そういったことは可能でしょうか?

["aaa,bbb,ccc", "sss,fff,vvv", "ttt,yyy,eee"]

※今回でいうと期待する結果は
=>aaa,sss,ttt
です。

こういう不特定な配列の場合ももしわかりましたらお願いしたいです。

["adaa,bbb,cdcc,addaa", "sss,assaa,fff,vvv", "tthhht,yhhhyy,eyyyuee"]

期待する結果
=>adaa,sss,tthhht

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

Ruby

1a = ["adaa,bbb,cdcc,addaa", "sss,assaa,fff,vvv", "tthhht,yhhhyy,eyyyuee"] 2kotae = Array.new 3a.each {|tmp| 4 b = tmp.split(/,/) 5 kotae << b[0] 6} 7print kotae

a の配列を1個ずつ取り出す
取り出したものを , で分割したものを bという配列にする
作っておいた配列に b[index] を追加していく

投稿2015/07/15 16:38

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

じゃあ、こんなのでは ?

ruby

1def map_nth( source, n ) 2 source.map{ |x| x.split( ',' )[ n - 1 ] } 3end 4 5map_nth( ["adaa,bbb,cdcc,addaa,ttttt", "sss,assaa,fff,vvv,hgffd", "tthhht,yhhhyy,eyyyuee,qwqwq"], 2 ) 6=> ["bbb","assaa","yhhhyy"] 7 8map_nth( ["adaa,bbb,cdcc,addaa,ttttt", "sss,assaa,fff,vvv,hgffd", "tthhht,yhhhyy,eyyyuee,qwqwq"], 3 ) 9=> ["cdcc", "fff", "eyyyuee"]

投稿2015/07/15 14:32

編集2015/07/15 14:34
H_Kuruno

総合スコア65

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kento2543

2015/07/15 14:42

独自にメソッドをつくるという発想はなかったです。 非常にべんきょうになります。 ありがとうございます!
guest

0

固定文字列の単語の抽出と言うことでいいのでしょうか?

Ruby

1a=["adaa,bbb,cdcc,addaa", "sss,assaa,fff,vvv", "tthhht,yhhhyy,eyyyuee"] 2 3b=a.map{|x| x.split(/,/)}.flatten 4 5p b.grep("aaa") 6p b.grep("sss") 7p b.grep("fff")

投稿2015/07/15 13:52

otn

総合スコア84423

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kento2543

2015/07/15 14:05

さっそく有り難うございます。 おっしゃる通り固定文字列の単語の抽出です。 こんなやり方ができるとは。大変興味深いです。 また、以下のような文字列から括弧の一つ目の文字列の抽出をしたいのですが、 そういったことは可能でしょうか? ["aaa,bbb,ccc", "sss,fff,vvv", "ttt,yyy,eee"] ※今回でいうと期待する結果は =>aaa,sss,ttt です。 こういう不特定な配列の場合ももしわかりましたらお願いしたいです。 ["adaa,bbb,cdcc,addaa", "sss,assaa,fff,vvv", "tthhht,yhhhyy,eyyyuee"] 期待する結果 =>adaa,sss,tthhht 度々恐縮ですが、宜しくお願いします。
guest

0

追記の方へです。

Ruby

1ary1 = ["aaa,bbb,ccc", "sss,fff,vvv", "ttt,yyy,eee"] 2ary2 = ["adaa,bbb,cdcc,addaa", "sss,assaa,fff,vvv", "tthhht,yhhhyy,eyyyuee"] 3n = 0 #各要素の先頭からn番目 4 5p ary1.map{|str| str.split(',')[n] }.join(',') #=> aaa,sss,ttt 6p ary2.map{|str| str.split(',')[n] }.join(',') #=> adaa,sss,tthhht

念のために言うと、Rubyの配列は可変長です。

投稿2015/07/24 15:27

編集2015/07/24 15:31
f_acid

総合スコア56

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

こんなんでいいですか ?

ruby

1a = ["adaa,bbb,cdcc,addaa", "sss,assaa,fff,vvv", "tthhht,yhhhyy,eyyyuee"] 2a.map{ |x| x.split( ',' ).first }

ちなみに、元々の問題は、各配列のそれぞれの番目の要素を抽出したいのかと思ったので、

ruby

1a = ["aaa,bbb,ccc", "sss,fff,vvv", "ttt,yyy,eee"] 2a.each_with_index.map{ |x,i| x.split( ',' )[i] }

みたいなのを期待してたのかと思いました。

投稿2015/07/15 14:15

H_Kuruno

総合スコア65

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kento2543

2015/07/15 14:23

ご回答有り難うございます。 ちなみにで恐縮ですが、今回のようなソースだと、firstやlastで行頭、行末は取得できますが、前から2つめ、3つめの文字列を同様に取得することは出来ますでしょうか? a.map{ |x| x.split( ',' ).first } a = ["adaa,bbb,cdcc,addaa,ttttt", "sss,assaa,fff,vvv,hgffd", "tthhht,yhhhyy,eyyyuee,qwqwq"] #前から2つめの文字列を取得した場合の期待する結果 =>[bbb,assaa,yhhhyy] findとかではできないですよね?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問