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

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

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

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

Q&A

解決済

3回答

4791閲覧

rubyの2次元配列のindexメソッドが正しい値を返してくれない

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

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

0グッド

0クリップ

投稿2016/09/09 08:21

##質問
rubyにて2次元配列の任意の値の位置を返してもらうためには
どうすればいいか教えてください.

##内容
現在,rubyの配列の学習をしています.
その際下記のコードを作成しました.

ruby:

1array =[ 2"1S11111101", 3"0000001001", 4"0101101101", 5"0100000000", 6"1101101111", 7"0000100001", 8"0111111101", 9"0000100000", 10"0111101110", 11"00001000G1" 12] 13 14puts array[0][1] 15puts array.index("S")

上記を実装すると
puts array[0][1]
をすると,Sが出力されますが,
puts array.index("S")
では値が出力されません.こちらの原因はなんでしょうか?

rubyにて2次元配列の任意の値の位置を返してもらうためにはどうすればいいか教えてください.

上記よろしくお願いいたします.

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

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

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

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

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

guest

回答3

0

まず、これは文字列の入った1次元配列です。

そして、Array#indexは1次元配列の要素を完全比較するのにしか使えません。文字列の中身まで調べたい、となれば別にコードを書く必要があります。

ruby

1col = nil 2row = array.index{ |str| col = str.index('S') }

投稿2016/09/09 08:40

maisumakun

総合スコア145183

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

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

退会済みユーザー

退会済みユーザー

2016/10/04 04:45

返事が遅くなり,大変申し訳ありません! おっしゃる通り,こちら1次元配列でした... ご指摘ありがとうございます! 文字列の中身を調べるときにはさらにそれ用の文が必要なんですね! ありがとうございます!
guest

0

ベストアンサー

次のコードを書いてみました。

ruby

1array = [ 2 "1S11111101", 3 "0000001001", 4 "0101101101", 5 "0100000000", 6 "1101101111", 7 "0000100001", 8 "0111111101", 9 "0000100000", 10 "0111101110", 11 "00001000G1" 12] 13 14# String の配列から、指定した文字の場所 (何番目の文字列の何文字目) を 15# 配列 [文字列の index, その文字列での index] として返す。 16# 一致する文字がなければ nil を返す。 17def index2(strs, c) 18 strs.each_with_index do |str, row| 19 col = str.index(c) 20 next if col.nil? 21 return [row, col] 22 end 23 nil 24end 25 26pos = index2(array, 'S') 27p pos 28p array[pos[0]][pos[1]] 29puts 30 31pos = index2(array, 'X') 32p pos 33puts 34 35pos = index2(array, 'G') 36p pos 37p array[pos[0]][pos[1]] 38puts

実行結果

$ ruby a.rb [0, 1] "S" nil [9, 8] "G"

投稿2016/09/09 23:28

katoy

総合スコア22324

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

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

退会済みユーザー

退会済みユーザー

2016/10/04 04:51

返事が遅くなり,大変申し訳ありません! 僕がやりたかったことを,具体的に提示してくださりありがとうございます! なるほど,配列 [文字列の index, その文字列での index] として返すという考え方をすれば 1次元配列でも探索できますね! 本当にありがとうございます!
guest

0

ruby

1arr = [[1,2],[3,4],[5,6]] 2arr.each_with_index {|c,i| 3 arr[i].each_with_index{|c,j| 4 p i,j if (6 == arr[i][j]) # => 2 1 5 } 6}

ご質問のコードは文字列の一次元配列ですが、
二次元配列の場合のかんたんなサンプルです。
(いろんな書き方があるでしょうが一例です)

要点は二次元配列は入れ子にするので、
ループも入れ子にして走査する点です。

投稿2016/09/09 14:38

LLman

総合スコア5592

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

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

退会済みユーザー

退会済みユーザー

2016/10/04 04:47

返事が遅くなり,大変申し訳ありません! おっしゃる通り,こちら1次元配列ですね. ご指摘ありがとうございます!お恥ずかしい. rubyの2次元配列の書き方がわからなかったので とても助かります! サンプルありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問