In case that's not clear, scan uses a regex to provide an array of
2-element arrays from the text. Then flatten makes it into a single
array, then the * turns it into a list of just values, instead of an
array. Then Hash[] turns each 2 values into a hash.
Your problem is somewhat underspecified; with more examples and info,
someone might be able to help better. Some important questions:
- may the phrases include spaces?
- can there be more than two levels?
- in your examples above, must the frist key be 1, or could it also be
"1"? Or perhaps "1:0"?
- perhaps some more background on the use case would help as well.
In case that's not clear, scan uses a regex to provide an array of
2-element arrays from the text. Then flatten makes it into a single
array, then the * turns it into a list of just values, instead of an
array. Then Hash[] turns each 2 values into a hash.
Actually the original was correct - the second 2 should have a key of
2:2 even though it only appears in the original string as 2 (since it
follows a 2:1, it is assumed that any number after it would be 2:x. If
there was a 3:1 sometime later, then the next two would have a key of
3:2)