indexing into a collection

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|

indexing into a collection

Joseph Alotta
Greetings,

I have a OrderedCollection of DrivingDays.


an OrderedCollection(2016-01-02| quigley s| nil|18§
                     2016-01-03| marianos fresh| nil|5§
                     2016-01-04| fresh thyme| nil|5§
                     2016-01-05| panda express| nil|3§
                     2016-01-06| peets| nil|7§
                     2016-01-07| starbucks| nil|3§)

I want to select aDrivingDay object from the list by date, update it by adding mileage and places visited and put it back into the list.

If I #select the OrderedCollection, I get a copy of the item, not the same one in the OrderedCollection.

How do I select an item in the list for update?

Sincerely,

Joe.


_______________________________________________
Beginners mailing list
[hidden email]
http://lists.squeakfoundation.org/mailman/listinfo/beginners
Reply | Threaded
Open this post in threaded view
|

RE: indexing into a collection

Ron Teitelbaum
Hi Joe,

If the orderedCollection contains your object DrivingDays then select should give you the object and not a copy.  

You don't need to add it back to the collection just update the object.

Check your code for anything that might be making a copy.

All the best,

Ron Teitelbaum


-----Original Message-----
From: [hidden email] [mailto:[hidden email]] On Behalf Of Joseph Alotta
Sent: Tuesday, July 26, 2016 3:04 PM
To: [hidden email]
Subject: [Newbies] indexing into a collection

Greetings,

I have a OrderedCollection of DrivingDays.


an OrderedCollection(2016-01-02| quigley s| nil|18§
                     2016-01-03| marianos fresh| nil|5§
                     2016-01-04| fresh thyme| nil|5§
                     2016-01-05| panda express| nil|3§
                     2016-01-06| peets| nil|7§
                     2016-01-07| starbucks| nil|3§)

I want to select aDrivingDay object from the list by date, update it by adding mileage and places visited and put it back into the list.

If I #select the OrderedCollection, I get a copy of the item, not the same one in the OrderedCollection.

How do I select an item in the list for update?

Sincerely,

Joe.


_______________________________________________
Beginners mailing list
[hidden email]
http://lists.squeakfoundation.org/mailman/listinfo/beginners

_______________________________________________
Beginners mailing list
[hidden email]
http://lists.squeakfoundation.org/mailman/listinfo/beginners
Reply | Threaded
Open this post in threaded view
|

Re: indexing into a collection

Ben Coman
Hi Joe,

As Ron said, you should not be getting a copy.  If you still have a
problem, perhaps best if you post code for a complete example:
* class definition (with just two instance variables)
* instance variable accessor methods
* instance creation & adding to collection
* select statement
* updating object

cheers -ben

On Wed, Jul 27, 2016 at 5:53 AM, Ron Teitelbaum <[hidden email]> wrote:

> Hi Joe,
>
> If the orderedCollection contains your object DrivingDays then select should give you the object and not a copy.
>
> You don't need to add it back to the collection just update the object.
>
> Check your code for anything that might be making a copy.
>
> All the best,
>
> Ron Teitelbaum
>
>
> -----Original Message-----
> From: [hidden email] [mailto:[hidden email]] On Behalf Of Joseph Alotta
> Sent: Tuesday, July 26, 2016 3:04 PM
> To: [hidden email]
> Subject: [Newbies] indexing into a collection
>
> Greetings,
>
> I have a OrderedCollection of DrivingDays.
>
>
> an OrderedCollection(2016-01-02| quigley s| nil|18§
>                      2016-01-03| marianos fresh| nil|5§
>                      2016-01-04| fresh thyme| nil|5§
>                      2016-01-05| panda express| nil|3§
>                      2016-01-06| peets| nil|7§
>                      2016-01-07| starbucks| nil|3§)
>
> I want to select aDrivingDay object from the list by date, update it by adding mileage and places visited and put it back into the list.
>
> If I #select the OrderedCollection, I get a copy of the item, not the same one in the OrderedCollection.
>
> How do I select an item in the list for update?
>
> Sincerely,
>
> Joe.
_______________________________________________
Beginners mailing list
[hidden email]
http://lists.squeakfoundation.org/mailman/listinfo/beginners
Reply | Threaded
Open this post in threaded view
|

Re: indexing into a collection

Joseph Alotta
Ben, Ron, I made a small example, and it works as you said it would:

a := #( #(1 2)  #(3 4)).
b := a asOrderedCollection.
b  => an OrderedCollection(#(1 2) #(3 4))
c := b select: [ :i | (i first) = 3 ].
c => an OrderedCollection(#(3 4))
d := c first
d =>  #(3 4)
d at: 2 put: 5
d =>  #(3 5)
b  => an OrderedCollection(#(1 2) #(3 5))

Okay, I will check my other code.

Sincerely,

Joe.




> On Jul 26, 2016, at 6:25 PM, Ben Coman [via Smalltalk] <[hidden email]> wrote:
>
> Hi Joe,
>
> As Ron said, you should not be getting a copy.  If you still have a
> problem, perhaps best if you post code for a complete example:
> * class definition (with just two instance variables)
> * instance variable accessor methods
> * instance creation & adding to collection
> * select statement
> * updating object
>
> cheers -ben
>
> On Wed, Jul 27, 2016 at 5:53 AM, Ron Teitelbaum <[hidden email]> wrote:
>
> > Hi Joe,
> >
> > If the orderedCollection contains your object DrivingDays then select should give you the object and not a copy.
> >
> > You don't need to add it back to the collection just update the object.
> >
> > Check your code for anything that might be making a copy.
> >
> > All the best,
> >
> > Ron Teitelbaum
> >
> >
> > -----Original Message-----
> > From: [hidden email] [mailto:[hidden email]] On Behalf Of Joseph Alotta
> > Sent: Tuesday, July 26, 2016 3:04 PM
> > To: [hidden email]
> > Subject: [Newbies] indexing into a collection
> >
> > Greetings,
> >
> > I have a OrderedCollection of DrivingDays.
> >
> >
> > an OrderedCollection(2016-01-02| quigley s| nil|18§
> >                      2016-01-03| marianos fresh| nil|5§
> >                      2016-01-04| fresh thyme| nil|5§
> >                      2016-01-05| panda express| nil|3§
> >                      2016-01-06| peets| nil|7§
> >                      2016-01-07| starbucks| nil|3§)
> >
> > I want to select aDrivingDay object from the list by date, update it by adding mileage and places visited and put it back into the list.
> >
> > If I #select the OrderedCollection, I get a copy of the item, not the same one in the OrderedCollection.
> >
> > How do I select an item in the list for update?
> >
> > Sincerely,
> >
> > Joe.
> _______________________________________________
> Beginners mailing list
> [hidden email]
> http://lists.squeakfoundation.org/mailman/listinfo/beginners
>
>
> If you reply to this email, your message will be added to the discussion below:
> http://forum.world.st/indexing-into-a-collection-tp4908090p4908113.html
> To start a new topic under Squeak - Beginners, email [hidden email]
> To unsubscribe from Squeak - Beginners, click here.
> NAML

Reply | Threaded
Open this post in threaded view
|

Re: indexing into a collection

Ben Coman
On Wed, Jul 27, 2016 at 8:13 AM, Joseph Alotta <[hidden email]> wrote:
> Ben, Ron, I made a small example, and it works as you said it would:
>
> a := #( #(1 2)  #(3 4)).
> b := a asOrderedCollection.
> b  => an OrderedCollection(#(1 2) #(3 4))
> c := b select: [ :i | (i first) = 3 ].

Ahh. Code examples help. Maybe what you need is #detect:
which returns an element rather than a collection of elements.

> c => an OrderedCollection(#(3 4))
> d := c first
> d =>  #(3 4)
> d at: 2 put: 5
> d =>  #(3 5)
> b  => an OrderedCollection(#(1 2) #(3 5))
>
> Okay, I will check my other code.
>
> Sincerely,
>
> Joe.

Here's a domain specific example...

Object subclass: #DrivingDays
    instanceVariables: 'date store mileage"?" '
    ...etc...

oc := OrderedCollection new.
oc add: (DrivingDays new date: '2016-01-02' ; store: 'quigley' ; mileage: 18).
oc add: (DrivingDays new date: '2016-01-03' ; store: 'marianos' ; mileage: 5).

oc printString.
>> > an OrderedCollection(2016-01-02| quigley | 18,
>> >                      2016-01-03| marianos | 5)

drivingDayToUpdate := oc detect: [ :dd | dd store = 'marianos' ].
drivingDayToUpdate mileage: 7.

oc printString.
>> > an OrderedCollection(2016-01-02| quigley | 18,
>> >                      2016-01-03| marianos | 7)

(disclaimer, I am not somewhere I can run this. Its just off the top
of my head.)
cheers -ben

>
>
>
>
>> On Jul 26, 2016, at 6:25 PM, Ben Coman [via Smalltalk] <[hidden email]>
>> wrote:
>>
>> Hi Joe,
>>
>> As Ron said, you should not be getting a copy.  If you still have a
>> problem, perhaps best if you post code for a complete example:
>> * class definition (with just two instance variables)
>> * instance variable accessor methods
>> * instance creation & adding to collection
>> * select statement
>> * updating object
>>
>> cheers -ben
>>
>> On Wed, Jul 27, 2016 at 5:53 AM, Ron Teitelbaum <[hidden email]> wrote:
>>
>> > Hi Joe,
>> >
>> > If the orderedCollection contains your object DrivingDays then select
>> > should give you the object and not a copy.
>> >
>> > You don't need to add it back to the collection just update the object.
>> >
>> > Check your code for anything that might be making a copy.
>> >
>> > All the best,
>> >
>> > Ron Teitelbaum
>> >
>> >
>> > -----Original Message-----
>> > From: [hidden email] [mailto:[hidden email]] On Behalf Of Joseph Alotta
>> > Sent: Tuesday, July 26, 2016 3:04 PM
>> > To: [hidden email]
>> > Subject: [Newbies] indexing into a collection
>> >
>> > Greetings,
>> >
>> > I have a OrderedCollection of DrivingDays.
>> >
>> >
>> > an OrderedCollection(2016-01-02| quigley s| nil|18§
>> >                      2016-01-03| marianos fresh| nil|5§
>> >                      2016-01-04| fresh thyme| nil|5§
>> >                      2016-01-05| panda express| nil|3§
>> >                      2016-01-06| peets| nil|7§
>> >                      2016-01-07| starbucks| nil|3§)
>> >
>> > I want to select aDrivingDay object from the list by date, update it by
>> > adding mileage and places visited and put it back into the list.
>> >
>> > If I #select the OrderedCollection, I get a copy of the item, not the
>> > same one in the OrderedCollection.
>> >
>> > How do I select an item in the list for update?
>> >
>> > Sincerely,
>> >
>> > Joe.
_______________________________________________
Beginners mailing list
[hidden email]
http://lists.squeakfoundation.org/mailman/listinfo/beginners
Reply | Threaded
Open this post in threaded view
|

indexing into a collection

Louis LaBrunda
Hi Joe & Ben,

Ben's example is a good one.  If there will be only one instance of DrivingDays in the
collection for a given date then you should look at Dictionary and LookupTable.  You could then
add items to the collection with:

collection at: aDrivingDays date put: aDrivingDays.

and then use:

item := collection at: aDate.

to fetch the instance you want.

Lou


On Wed, 27 Jul 2016 15:51:44 +0800, Ben Coman <[hidden email]> wrote:

>On Wed, Jul 27, 2016 at 8:13 AM, Joseph Alotta <[hidden email]> wrote:
>> Ben, Ron, I made a small example, and it works as you said it would:
>>
>> a := #( #(1 2)  #(3 4)).
>> b := a asOrderedCollection.
>> b  => an OrderedCollection(#(1 2) #(3 4))
>> c := b select: [ :i | (i first) = 3 ].
>
>Ahh. Code examples help. Maybe what you need is #detect:
>which returns an element rather than a collection of elements.
>
>> c => an OrderedCollection(#(3 4))
>> d := c first
>> d =>  #(3 4)
>> d at: 2 put: 5
>> d =>  #(3 5)
>> b  => an OrderedCollection(#(1 2) #(3 5))
>>
>> Okay, I will check my other code.
>>
>> Sincerely,
>>
>> Joe.
>
>Here's a domain specific example...
>
>Object subclass: #DrivingDays
>    instanceVariables: 'date store mileage"?" '
>    ...etc...
>
>oc := OrderedCollection new.
>oc add: (DrivingDays new date: '2016-01-02' ; store: 'quigley' ; mileage: 18).
>oc add: (DrivingDays new date: '2016-01-03' ; store: 'marianos' ; mileage: 5).
>
>oc printString.
>>> > an OrderedCollection(2016-01-02| quigley | 18,
>>> >                      2016-01-03| marianos | 5)
>
>drivingDayToUpdate := oc detect: [ :dd | dd store = 'marianos' ].
>drivingDayToUpdate mileage: 7.
>
>oc printString.
>>> > an OrderedCollection(2016-01-02| quigley | 18,
>>> >                      2016-01-03| marianos | 7)
>
>(disclaimer, I am not somewhere I can run this. Its just off the top
>of my head.)
>cheers -ben
>
>>
>>
>>
>>
>>> On Jul 26, 2016, at 6:25 PM, Ben Coman [via Smalltalk] <[hidden email]>
>>> wrote:
>>>
>>> Hi Joe,
>>>
>>> As Ron said, you should not be getting a copy.  If you still have a
>>> problem, perhaps best if you post code for a complete example:
>>> * class definition (with just two instance variables)
>>> * instance variable accessor methods
>>> * instance creation & adding to collection
>>> * select statement
>>> * updating object
>>>
>>> cheers -ben
>>>
>>> On Wed, Jul 27, 2016 at 5:53 AM, Ron Teitelbaum <[hidden email]> wrote:
>>>
>>> > Hi Joe,
>>> >
>>> > If the orderedCollection contains your object DrivingDays then select
>>> > should give you the object and not a copy.
>>> >
>>> > You don't need to add it back to the collection just update the object.
>>> >
>>> > Check your code for anything that might be making a copy.
>>> >
>>> > All the best,
>>> >
>>> > Ron Teitelbaum
>>> >
>>> >
>>> > -----Original Message-----
>>> > From: [hidden email] [mailto:[hidden email]] On Behalf Of Joseph Alotta
>>> > Sent: Tuesday, July 26, 2016 3:04 PM
>>> > To: [hidden email]
>>> > Subject: [Newbies] indexing into a collection
>>> >
>>> > Greetings,
>>> >
>>> > I have a OrderedCollection of DrivingDays.
>>> >
>>> >
>>> > an OrderedCollection(2016-01-02| quigley s| nil|18§
>>> >                      2016-01-03| marianos fresh| nil|5§
>>> >                      2016-01-04| fresh thyme| nil|5§
>>> >                      2016-01-05| panda express| nil|3§
>>> >                      2016-01-06| peets| nil|7§
>>> >                      2016-01-07| starbucks| nil|3§)
>>> >
>>> > I want to select aDrivingDay object from the list by date, update it by
>>> > adding mileage and places visited and put it back into the list.
>>> >
>>> > If I #select the OrderedCollection, I get a copy of the item, not the
>>> > same one in the OrderedCollection.
>>> >
>>> > How do I select an item in the list for update?
>>> >
>>> > Sincerely,
>>> >
>>> > Joe.
--
Louis LaBrunda
Keystone Software Corp.
SkypeMe callto://PhotonDemon

_______________________________________________
Beginners mailing list
[hidden email]
http://lists.squeakfoundation.org/mailman/listinfo/beginners