want to search value in nested arrays and return other value

J

Joao Silva

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
 
P

Pierre Pat

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.
 
B

botp

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

did you really check that? it will always return "value 1" ;)
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"
=> ""
 
J

Joao Silva

Pierre said:
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.
did you really check that? it will always return "value 1" ;)
erm, right :) I meant 'v[1] == value' - thats how I tried it out on my
computer :)
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.
 
S

Stefan Rusterholz

Joao said:
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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top