Robert Klemme
2/11/2008 5:08:00 PM
On 11.02.2008 17:52, Jonas Schneider wrote:
> Heya,
>
> I'm pretty sure theres an easy way for this:
> I have a collection of objects; I want to remove 1 property (they all
> have it in common) from them.
>
> so if
>
> a = [
> {:a => 'blah', :prop => '123'},
> {:a => 'blab', :prop => '234'}
> ]
>
> I want to remove the attribute "prop" from all of them.
That is not an attribute but a hash key.
> I tried it with this the first time:
>
> a.collect {|x| y = x.to_a; y.delete(x.prop); y }
>
> but it doesnt seem to work; i the property isn't removed, and it would
> also be bad if some other property would have the same value cause it
> would get removed, too.
>
> I´m sure there's some a.without method or something, but I'm not able
> to find it...
Do you mean
irb(main):001:0> a = [
irb(main):002:1* {:a => 'blah', :prop => '123'},
irb(main):003:1* {:a => 'blab', :prop => '234'}
irb(main):004:1> ]
=> [{:a=>"blah", :prop=>"123"}, {:a=>"blab", :prop=>"234"}]
irb(main):005:0> a.each {|x| x.delete :prop}
=> [{:a=>"blah"}, {:a=>"blab"}]
?
If you want the original unmodified you can do
a.map {|x| x.dup.delete :prop}
Cheers
robert