Forum: Ruby Deleting object inn array, if...

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
henrik.ormasen (Guest)
on 2005-12-05 00:07
(Received via mailing list)
I have an array witch contains the id of living objects. I want to
delete objects from the array, if the objects contains an variable ==
"other_var".

I was thinking of something like the following thing:

 FAKE_DATABASE.delete_if {|x| x.var_of_x == @body }

I thought this would bee logical, but it doesn't seem like Ruby give
me right here.

How can I do this?

Regards Henrik
(PS: Pleas don't kill me if I did something stupid here, I'm newbie on
Ruby :-)).
neoneye (Guest)
on 2005-12-05 00:11
(Received via mailing list)
On 12/4/05, Henrik Ormåsen <removed_email_address@domain.invalid> wrote:
>  FAKE_DATABASE.delete_if {|x| x.var_of_x == @body }
[snip]
>
> How can I do this?

how about ?

[1, 2, 3, 4, 5].delete_if {|i| i==3}    #=> [1, 2, 4, 5]
neoneye (Guest)
on 2005-12-05 00:11
(Received via mailing list)
On 12/4/05, Simon S. <removed_email_address@domain.invalid> wrote:
> On 12/4/05, Henrik Ormåsen <removed_email_address@domain.invalid> wrote:
> >  FAKE_DATABASE.delete_if {|x| x.var_of_x == @body }
> [snip]
> >
> > How can I do this?
>
> how about ?
>
> [1, 2, 3, 4, 5].delete_if {|i| i==3}    #=> [1, 2, 4, 5]

Argh.. realized that you wanted x.var_of_x to be deleted.
I don't understand what you want.. can you elaborate?
gwtmp01 (Guest)
on 2005-12-05 00:16
(Received via mailing list)
On Dec 4, 2005, at 5:06 PM, Henrik Ormåsen wrote:
> I have an array witch contains the id of living objects.

Do you mean that you are actually storing the object_id of a Ruby
object?  Something like:

   class Article
     attr_accessor :body
   end

   a = Article.new
   b = Article.new
   c = Article.new

   database = [a.object_id, b.object_id, c.object_id]

or is your database something like:

   database = [a, b, c]

or are you talking about primary keys from a relational database?

Could you clarify?
henrik.ormasen (Guest)
on 2005-12-05 00:56
(Received via mailing list)
Thanks for the fast replay's, I'm impressed :-).

Her is my DB thing:

class Item
  attr_reader :body

  FAKE_DATABASE = []

  def initialize(body)
    @body = body
  end
  def add
    FAKE_DATABASE.unshift(self)
  end
  def self.find_recent
     FAKE_DATABASE
  end
  def del
    FAKE_DATABASE.delete_if {|x| x.body == @body }
  end
end


- Henrik
toddkennethbenson (Guest)
on 2005-12-05 04:06
(Received via mailing list)
Henrik Ormåsen wrote:
>     @body = body
> end
>
>
> - Henrik

Sounds maybe you are trying to do something like:

<irb(main):001:0> class Item
<irb(main):002:1>   attr_reader :body
<irb(main):003:1>   @@db = []
<irb(main):004:1>   def initialize( body ) @body=body end
<irb(main):005:1>   def add() unshift.self end
<irb(main):006:1>   def recent() @@db end
<irb(main):007:1>   def del @@db.delete_if { |x| x.body==@body }
<irb(main):008:1> end
=> nil

<irb(main):009:0> a = Item.new "a"
=> #<Item:oxb7ca1120 @body="a">

<irb(main):010:0> b = Item.new "b"
=> #<Item:0xb7c9c314 @body="b">

<irb(main):011:0> a.add
=> [#<Item:0xb7ca1120 @body="a">]

<irb(main):012:0> b.add
=> [#<Item:0xb7c9c314 @body="b">, #<Item:0xb7ca1120 @body="a">]

<irb(main):013:0> a.recent
=> same thing as above

<irb(main):014:0> b.recent
=> same thing as above

<irb(main):015:0> a.add
=> [#<item:0xb7ca1120 @body="a", #<Item:0xb7c9c314 @body="b">,
#<Item:0xb7ca1120 @body="a">]
note there are 2 "a" objects in the same db, you probably don't want
this, so will have to change your add method accordingly

<irb(main):016:0> a.recent == b.recent
=> true

<irb(main):017:0> a.del
=> [#<item:0xb7ca9c314 @body="b">]

<irb(main):018:0> b.del
=> []

<irb(main):019:0> a.recent == b.recent
=> true

At least that's the direction you look like you are headed.

hth,
Todd
bob.news (Guest)
on 2005-12-05 10:55
(Received via mailing list)
Henrik Ormåsen wrote:
>     @body = body
> end
>
>
> - Henrik

What's your problem?  Deletion works ok:

irb(main):020:0* a=Item.new "a"
=> #<Item:0x10192810 @body="a">
irb(main):021:0> a.add
=> [#<Item:0x10192810 @body="a">]
irb(main):022:0> Item.find_recent
=> [#<Item:0x10192810 @body="a">]
irb(main):023:0> a.del
=> []
irb(main):024:0> Item.find_recent
=> []
irb(main):025:0>

Kind regards

    robert
This topic is locked and can not be replied to.