Want to search value in nested arrays and return other value


#1

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


#2

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.


#3

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”
=> “”


#4

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.


#5

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