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

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

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

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

Q&A

解決済

4回答

157閲覧

ruby 配列内の配列を検索し、一致したのを表示

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

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

0グッド

0クリップ

投稿2018/08/05 12:42

ruby 配列内の配列を検索し、一致したのを表示したいです。
単純なのであれば、selectでできるですが、配列の中に、配列があり、その配列を検索ワードとしたいです。具体的には、

A = [ [100, [1,2,3,4]], [400,[1,2,1,2]], [150,[3,4,5,6]], [300,[9,9,9,9]], [500,[9,8,7,6]]]

というAの配列に対して、

S = [1,2,3,4] を検索したら、”100”が検索結果で見つかり、
T = [9,9,9,9] を検索したら、”300”が検索結果で見つかるようなプログラムを書きたいです。

とうぜん、Aに含まれていない K = [7,7,7,7] を検索したら、Nillか0が返ってくるようにしたいです。

サンプルコードを頂けると助かります。

宜しくお願いいたします。

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

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

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

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

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

guest

回答4

0

ベストアンサー

Arrayにはrassocというメソッドがあるのでした。
https://docs.ruby-lang.org/ja/latest/method/Array/i/rassoc.html

ruby

1A=[[100, [1,2,3,4]], [400,[1,2,1,2]], [150,[3,4,5,6]], [300,[9,9,9,9]], [500,[9,8,7,6]]] 2p A.rassoc([1,2,3,4])&.first #=> 100 3p A.rassoc([9,9,9,9])&.first #=> 300 4p A.rassoc([7,7,7,7])&.first #=> nil 5

投稿2018/08/05 13:50

takahashim

総合スコア1877

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

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

takahashim

2018/08/05 15:02

まあでも、何度も検索を行うのであれば、katoyさんやsatoshihさんのようにHashを作ってから検索するほうがよいかもしれません(そうするとrassocメソッドの存在意義は…という気もしますが。でも実用的な目的でrassocを使ったことって今まで一度もなくて、今回は人生で初めて役に立ったかも、くらいのレアさでした)。
guest

0

検索対象の形成しなおす方法はどうでしょうか?

ruby

1a = [ [100, [1,2,3,4]], [400,[1,2,1,2]], [150,[3,4,5,6]], [300,[9,9,9,9]], [500,[9,8,7,6]]] 2 3# 配列をハッシュに変換する 4hash = a.inject({}) do |base, array| 5 base[array.last] = array.first 6 base 7end 8# => {[1, 2, 3, 4]=>100, [1, 2, 1, 2]=>400, [3, 4, 5, 6]=>150, [9, 9, 9, 9]=>300, [9, 8, 7, 6]=>500} 9 10hash[[1,2,3,4]] 11# => 100 12 13hash[[7,7,7,7]] 14# -> nil

投稿2018/08/05 13:48

satoshih

総合スコア797

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

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

0

ruby

1A = [ [100, [1,2,3,4]], [400,[1,2,1,2]], [150,[3,4,5,6]], [300,[9,9,9,9]], [500,[9,8,7,6]]] 2finding = [1, 2, 3, 4] 3p A.find{|x| x[1] == finding }&.first # => 100 4finding = [9,9,9,9] 5p A.find{|x| x[1] == finding }&.first # => 300 6finding = [7,7,7,7] 7p A.find{|x| x[1] == finding }&.first # => nil

投稿2018/08/05 12:53

asm

総合スコア15147

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

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

0

xx.rb

ruby

1a = [ 2 [100, [1, 2, 3, 4]], 3 [400, [1, 2, 1, 2]], 4 [150, [3, 4, 5, 6]], 5 [300, [9, 9, 9, 9]], 6 [500, [9, 8, 7, 6]] 7] 8 9hash_a = a.each_with_object({}){|v, hash| hash[v[1]] = v[0]} 10p hash_a 11 12p hash_a[[1, 2, 3, 4]] 13p hash_a[[9, 9, 9, 9]] 14p hash_a[[7, 7, 7, 7]] 15 16puts 17 18p a.select{|v| v[1] == [1, 2, 3, 4]}.dig(0, 0) 19p a.select{|v| v[1] == [9, 9, 9, 9]}.dig(0, 0) 20p a.select{|v| v[1] == [7, 7, 7, 7]}.dig(0, 0)

実行例
イメージ説明

投稿2018/08/05 13:45

katoy

総合スコア22324

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問