2011-01-31 16 views
0

(ルビー1.86)配列検出メソッド - 特定のサブ配列インデックスの値を返しますか?

Iのような配列からなる配列を有する:私は、インデックスの「オレンジ」の最初のインスタンスを見つけるために、検出方法を使用することができる知っている

>> myArray 
=> [["apple", 1], ["bananna", 2], ["peach", 3], ["orange", 4]] 

[0]のMyArrayというサブ配列:それが可能なら、どのようにSUP-配列のインデックス位置1と同様の値を返すメソッドを検出有し得る

myTest = (myArray.detect { |i| i[0] == 'orange' } || []).first 
=> orange 

、iは[0]が返されるが、ときに私[0] == 'オレンジ'私は[1]が返される必要があります。

私は「オレンジ」を検索し、戻り値は2

サンキューも持っている必要があり

+0

なぜ戻り値を2にしますか?あなたの説明を与えられたら、私はあなたが4を望むと思ったでしょう。 –

答えて

2

戻り値を4にしたいとします。#検出の必要はありません:

ar = [["apple", 1], ["bananna", 2], ["peach", 3], ["orange", 4]] 
puts ar.assoc("orange").last 

#=> 4 
+1

ニース! +1。私はそれの必要性を見いだせなかったので、いつもassocを忘れる。 –

+0

ありがとう - それは素晴らしいです! – Reno

+0

APIを読んでいるだけで、 ".last"の部分は決して見つけられませんでした。マッチで見つかったサブアレイの特定のインデックスを指す方法について言及していません。私はあなたが配列を本当によく理解しているかと思います。もう一度 - ありがとう! – Reno

2

ハッシュを使用することをおすすめします。これはあなたの使い方に適しており、大量のデータの方が高速になります。 @steenslagが指摘するように、さらに簡単か::

myTest = (myArray.detect { |i| i[0] == 'orange' } || []).last 
#=> 4 

更新:あなたが本当にあなたの部分配列から値を取得したい場合は

fruit = {'apple'=>1, 'banana'=>2, 'peach'=>3, 'orange'=>4, 'kiwi'=>42} 

puts fruit['orange'] #=> 4 

しかし、あなたのfirstlastへの変更

myTest = myArray.assoc("orange").last 
#=> 4 
+0

ありがとう、それは助けます。配列はdbクエリからのものです。私は2フィールドクエリの結果をハッシュにダンプしようとしたことは一度もありません。あまりにも多くを学ぶ.... – Reno

関連する問題