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