Want to search value in nested arrays and return other value

Hi.

I have following problem:

VALUES = [[‘value 1’, 1], [‘value 2’, 2], [‘value 3’, 3]]

I need a function that returns ‘value 1’ if I call the function with
parameter 1.

I tried this:

def value_name(value)
VALUES.select {|v| v[1] == 1}[0][0]
end

so value_name(1) returns ‘value 1’ but is there something more error
tolerant? E.g. returning ‘’ if value isn’t present instead of throwing
an error?

Changing the structure of VALUES is no option, I need exactly this
structure for options_for_select from the Rails framework

Thanks in advance
Andreas

Are you the one defining the data structure?
Or is it something you just have to use the way it is?

Because in this case, a hashmap would make more sense I believe.

On Wed, Dec 10, 2008 at 6:58 AM, Joao S. > I tried this:

def value_name(value)
VALUES.select {|v| v[1] == 1}[0][0]
end

did you really check that? it will always return “value 1” :wink:

so value_name(1) returns ‘value 1’ but is there something more error
tolerant? E.g. returning ‘’ if value isn’t present instead of throwing an error?

then just create it
eg,

def value_name3(value)
VALUES.each{|k,v| return k if v== value}
“”
end
=> nil
value_name3 1
=> “value 1”
value_name3 2
=> “value 2”
value_name3 3
=> “value 3”
value_name3 4
=> “”
value_name3 “asdf”
=> “”

Pierre P. wrote:

Are you the one defining the data structure?
Or is it something you just have to use the way it is?

Because in this case, a hashmap would make more sense I believe.
I need exactly this structure because it is used in options_for_select()
in Rails Framework, so i can’t change this. A hash is unsorted, and I
need this sorted.

botp wrote:

did you really check that? it will always return “value 1” :wink:
erm, right :slight_smile: I meant ‘v[1] == value’ - thats how I tried it out on my
computer :slight_smile:

def value_name3(value)
VALUES.each{|k,v| return k if v== value}
“”
end
Thank you very much, that does the task and works as I wanted to have
it.

Joao S. wrote:

Hi.

I have following problem:

VALUES = [[‘value 1’, 1], [‘value 2’, 2], [‘value 3’, 3]]

I need a function that returns ‘value 1’ if I call the function with
parameter 1.

Try .rassoc(1).first

Regards
Stefan