From: "Jesús Gabriel y Galán" Date: 2012-10-05T01:01:48+09:00 Subject: Re: Extract numbers from an alpha numeric string On Thu, Oct 4, 2012 at 5:29 PM, Joao Silva wrote: > Hi All. > > I'm doing a program in which you have to enter a series of numbers like > this: 1-3-4-11-15-8, I extract the numbers, and then transfer to a hash, > the program does is that given 2 arrays with shirt numbers, and the > names of a soccer team, should I create a hash associating both arrays. > > for example if I enter 1-3-4-11, the program should return: > > 1 => p1 > 3 => p3 > 4 => p4 > 11 => p11 > > try removing the dashs of string, but when I pass as argument a number > greater than nine, I just passed the first number: > > 1 => p1 > 3 => p2 > 10 => p1 > 11 => p1 > > I mean?, here is the code: > > ############################################### > tshirts=["1","2","3","4","5","6","7","8","9","10","11"] > players=["p1","p2","p3","p4","p5","p6","p7","p8","p9","p10","p11"] > > h={ > 1=>"p1", > 2=>"p2", > 3=>"p3", > 4=>"p4", > 5=>"p5", > 6=>"p6", > 7=>"p7", > 8=>"p8", > 9=>"p9", > 10=>"p10", > 11=>"p11" > } > > h.each{|k,v|puts "#{k} => #{v}"} > > def output(str,h) > s={} > for i in 0..str.length > h.each{|k,v| > > if k == str[i].to_i > #puts "#{k} ==> #{v}" > s[i]="#{v}" > print s[i].inspect > #print "-" > end > > } > end > > end > > print "Enter numbers of players (ej: 1-3-11-7-15-22-4-7): " > str=gets.chomp.to_s > > > for i in 0..str.length-1 > if str[i]=="-" > str[i]="" > end > end > > #puts str > > output(str,h) > > ################################################################### > > I accept any suggestion. I think you are making things too complicated. If you have a mapping for numbers => names: h = {1 => "p1", ...} by the way, if the rule is so simple you can build it dynamically: 1.9.2p290 :009 > h = (1..10).inject({}) {|hash, el| hash[el] = "p#{el}";hash} => {1=>"p1", 2=>"p2", 3=>"p3", 4=>"p4", 5=>"p5", 6=>"p6", 7=>"p7", 8=>"p8", 9=>"p9", 10=>"p10"} Then you just need to split the string and convert the strings to numbers: # read the input removing the \n 1.9.2p290 :003 > input = gets.chomp 1-2-3-4 => "1-2-3-4" # split on the "-" 1.9.2p290 :004 > numbers = input.split("-") => ["1", "2", "3", "4"] # translate to real numbers 1.9.2p290 :005 > numbers.map! {|element| element.to_i} => [1, 2, 3, 4] # for each number, look it up in the hash to get the name 1.9.2p290 :010 > numbers.each {|number| puts "#{number} => #{h[number]}"} 1 => p1 2 => p2 3 => p3 4 => p4 => [1, 2, 3, 4] Jesus.