On Sun, Apr 26, 2009 at 9:11 PM, Todd Benson <caduceass / gmail.com> wrote: > On Sun, Apr 26, 2009 at 7:25 PM, Martin Sharon <huangshuo.9 / gmail.com> wrote: >> Thank you Todd, but the number of the keywords are dynamic. >> >> and the array size is not fixed until program reads the first keywords >> of the input line. >> The line may be "3 tokyo newyork paris", also maybe >> "6 toyota bmw honda GM Ford" >> >> So I can't hard coded this array in the program. >> How can I parse the line? > > If you look closely, you'll see that James' method grabs everything > from 1 to -1 (the end) of the array, omitting the zeroth element. > > Robert's method assigns the garbage -- in this case, the whole array > -- to a dummy variable, and the important stuff to the var that you > care about (items). > > My way was only slightly different. I opted to create the whole > array, and then drop the first without creating an extra object. I > had to use (items = my_item_list.split) inside parens like that > because #shift returns the object you popped off the front of the > list, and not the actual remaining stuff. > > In all examples given, the size doesn't really matter... hah! Or as > they say, it depends :-) > > There are probably several ways to do this; I just like that particular one. You know after looking at your original post, maybe you are trying to create a digest, i.e. a Hash or associative array, with your keys as the first "column". In that case, you might try... h = {} f = my_string_list.each_line do |line| key = (value = line.split).shift h[key] = value end ...or something like that. Todd