Hi,
Is there any easy to unsplat an item?
ie. 1 becomes [1]
[2,3] remains [2,3] ?
so far i found:
a = *[1]
*b = *a #=> [1]
a = *[1,2]
*b = *a #=> [1,2]
but this doesn't work if a is a hash, because hash overrides the to_a
method
a = *[{"a"=>1}]
*b = *a #=> [["a",1]] when i actually want: [{"a"=>1}]
Thanks for helping
-Patrick
···
--
Posted via http://www.ruby-forum.com/.
What result are you trying to get?
robert
···
On 12.08.2008 18:21, Patrick Li wrote:
Is there any easy to unsplat an item?
ie. 1 becomes [1]
[2,3] remains [2,3] ?
so far i found:
a = *[1]
*b = *a #=> [1]
a = *[1,2]
*b = *a #=> [1,2]
but this doesn't work if a is a hash, because hash overrides the to_a
method
a = *[{"a"=>1}]
*b = *a #=> [["a",1]] when i actually want: [{"a"=>1}]
# this do?
def unsplat(x)
return .flatten
end
···
On Tue, Aug 12, 2008 at 5:21 PM, Patrick Li <patrickli_2001@hotmail.com> wrote:
Hi,
Is there any easy to unsplat an item?
ie. 1 becomes [1]
[2,3] remains [2,3] ?
so far i found:
a = *[1]
*b = *a #=> [1]
a = *[1,2]
*b = *a #=> [1,2]
but this doesn't work if a is a hash, because hash overrides the to_a
method
a = *[{"a"=>1}]
*b = *a #=> [["a",1]] when i actually want: [{"a"=>1}]
Thanks for helping
-Patrick
--
Posted via http://www.ruby-forum.com/\.
--
All you can do is try to know who your friends are as you head off to
the war / Pick a star on the dark horizon and follow the light
Yup that does nicely. Thanks very much.
···
--
Posted via http://www.ruby-forum.com/.
Just a warning, #flatten is not the inverse of splat, because it
recurses arbitrary levels of nested array.
···
On Tue, Aug 12, 2008 at 12:39 PM, Shadowfirebird <shadowfirebird@gmail.com> wrote:
# this do?
def unsplat(x)
return .flatten
end
--
Avdi
Home: http://avdi.org
Developer Blog: Avdi Grimm, Code Cleric
Twitter: http://twitter.com/avdi
Journal: http://avdi.livejournal.com
I can't use Array() because I want:
{"a"=>2} to become [{"a"=>2}]
so far: flatten is the best so far... except that it recursively
flattens inner arrays too... which is not ideal but workable for my
current use.
···
--
Posted via http://www.ruby-forum.com/.
There was a ruby quiz that included implementations of a single-level
flatten[1]. Taking from James Gray's solution[2], and minding your
requirements regarding hashes, what about this:
def unsplat(the_splatted)
if the_splatted.kind_of?(Hash)
[the_splatted]
else
[the_splatted].inject(Array.new) { |arr, a| arr.push(*a) }
end
end
unsplat(1) # => [1]
unsplat([2,3]) # => [2, 3]
unsplat([4,[5,6]]) # => [4, [5, 6]]
unsplat({'a'=>2}) # => [{"a"=>2}]
HTH,
Chris
[1] Ruby Quiz - One-Liners (#113)
[2] http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/238693
···
On Aug 12, 1:14 pm, Patrick Li <patrickli_2...@hotmail.com> wrote:
I can't use Array() because I want:
{"a"=>2} to become [{"a"=>2}]
so far: flatten is the best so far... except that it recursively
flattens inner arrays too... which is not ideal but workable for my
current use.
--
Posted viahttp://www.ruby-forum.com/.
# How about:
def unsplat(thing)
if thing.kind_of?(Array)
thing
else
[thing]
end
end
···
On Tue, Aug 12, 2008 at 8:47 PM, Chris Shea <cmshea@gmail.com> wrote:
On Aug 12, 1:14 pm, Patrick Li <patrickli_2...@hotmail.com> wrote:
I can't use Array() because I want:
{"a"=>2} to become [{"a"=>2}]
so far: flatten is the best so far... except that it recursively
flattens inner arrays too... which is not ideal but workable for my
current use.
--
Posted viahttp://www.ruby-forum.com/.
There was a ruby quiz that included implementations of a single-level
flatten[1]. Taking from James Gray's solution[2], and minding your
requirements regarding hashes, what about this:
def unsplat(the_splatted)
if the_splatted.kind_of?(Hash)
[the_splatted]
else
[the_splatted].inject(Array.new) { |arr, a| arr.push(*a) }
end
end
unsplat(1) # => [1]
unsplat([2,3]) # => [2, 3]
unsplat([4,[5,6]]) # => [4, [5, 6]]
unsplat({'a'=>2}) # => [{"a"=>2}]
HTH,
Chris
[1] Ruby Quiz - One-Liners (#113)
[2] http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/238693
--
All you can do is try to know who your friends are as you head off to
the war / Pick a star on the dark horizon and follow the light
lol yeah. Shadowfirebird's hack is the one i'm currently using. I just
wanted to know if there was a easier one-liner way of doing it. It
seemed plausible for there to be reverse operator given a splat
operator.
Anyway thanks for the help
-Patrick
···
--
Posted via http://www.ruby-forum.com/.