# Deleting object inn array, if

**URL:** <https://www.ruby-forum.com/t/deleting-object-inn-array-if/49462>\
**Category:** Ruby\
**Created:** [December 4, 2005, 11:07pm UTC](https://www.ruby-forum.com/t/deleting-object-inn-array-if/49462 "2005-12-04T23:07:55Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![henrik.ormasen](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/h/8baadc/32.png) [@henrik.ormasen](https://www.ruby-forum.com/u/henrik.ormasen)\
**Post date:** [December 4, 2005, 11:07pm UTC](https://www.ruby-forum.com/t/deleting-object-inn-array-if/49462/1 "2005-12-04T23:07:55Z")

</div>

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 :-)).

---

<div class="post-metadata">

**Author:** ![henrik.ormasen](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/h/8baadc/32.png) [@henrik.ormasen](https://www.ruby-forum.com/u/henrik.ormasen)\
**Post date:** [December 4, 2005, 11:11pm UTC](https://www.ruby-forum.com/t/deleting-object-inn-array-if/49462/2 "2005-12-04T23:11:58Z")

</div>

On 12/4/05, Henrik Ormåsen [removed\_email\_address@domain.invalid](mailto: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]

---

<div class="post-metadata">

**Author:** ![henrik.ormasen](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/h/8baadc/32.png) [@henrik.ormasen](https://www.ruby-forum.com/u/henrik.ormasen)\
**Post date:** [December 4, 2005, 11:11pm UTC](https://www.ruby-forum.com/t/deleting-object-inn-array-if/49462/3 "2005-12-04T23:11:58Z")

</div>

On 12/4/05, Simon S. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> On 12/4/05, Henrik Ormåsen [removed\_email\_address@domain.invalid](mailto: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?

---

<div class="post-metadata">

**Author:** ![henrik.ormasen](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/h/8baadc/32.png) [@henrik.ormasen](https://www.ruby-forum.com/u/henrik.ormasen)\
**Post date:** [December 4, 2005, 11:56pm UTC](https://www.ruby-forum.com/t/deleting-object-inn-array-if/49462/4 "2005-12-04T23:56:39Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![henrik.ormasen](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/h/8baadc/32.png) [@henrik.ormasen](https://www.ruby-forum.com/u/henrik.ormasen)\
**Post date:** [December 4, 2005, 11:16pm UTC](https://www.ruby-forum.com/t/deleting-object-inn-array-if/49462/5 "2005-12-04T23:16:02Z")

</div>

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?

---

<div class="post-metadata">

**Author:** ![henrik.ormasen](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/h/8baadc/32.png) [@henrik.ormasen](https://www.ruby-forum.com/u/henrik.ormasen)\
**Post date:** [December 5, 2005, 9:55am UTC](https://www.ruby-forum.com/t/deleting-object-inn-array-if/49462/6 "2005-12-05T09:55:12Z")

</div>

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
```

---

<div class="post-metadata">

**Author:** ![henrik.ormasen](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/h/8baadc/32.png) [@henrik.ormasen](https://www.ruby-forum.com/u/henrik.ormasen)\
**Post date:** [December 5, 2005, 3:06am UTC](https://www.ruby-forum.com/t/deleting-object-inn-array-if/49462/7 "2005-12-05T03:06:20Z")

</div>

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
