[JPR]

Hi Guys,

The exact thing that I've explained was how to use objects to get Associative 
Arrays in 4D. Associative Arrays are widely used in other languages like PHP or 
JavaScript.

In computer science, an Associative Array  is an abstract data type composed of 
a collection of (key, value) pairs, such that each possible key appears just 
once in the collection. In 4D, the JSON-type Objects are perfect for 
Associative Arrays. 

In many case, you will have 2 parallel arrays, let's say one for the product 
code ($arCodes), and one for the product name ($arNames). You want to find the 
name for a specific code (classic 4D way)

- You create the array with a loop, adding elements pairs $myCode and $myName:

$k:=Find in array($arCodes;$myCode) 
If ($k>0)
        $arNames{$k}:=$myName 
Else
        APPEND TO ARRAY($arCodes;$myCode)
        APPEND TO ARRAY($arNames;$myName) 
End if

- Then you can find a name from a code:

$k:=Find in array($arCodes;$myCode) 
If ($k>0)
        $myName:=$arNames{$k} 
Else
        $myName:="" 
End if

Now if you use an Object:

C_OBJECT($myArray)

You create the array with a loop:

OB SET($myArray;$myCode;$myName) 

-and you find with:

$myName:=OB Get($myArray;$myCode} 

...much simpler, and much faster! Why is it faster? With a classic array, the 
Find in array command has to parse the entire array, element per element, until 
the correct element is found (Except in case of a Sorted array, but sometimes 
you can't sort the array because the index of an element can be meaningful for 
your method)

In case of an object, the properties are 'indexed' by using an internal Hash 
table, so the access to one particular Property doesn't need a sequential 
parsing of the list of values, but an almost direct access. I confirm what 
Justin says, that is to say that the bigger will be the array, the more 
efficient will be associative arrays compared with classic parsing of arrays.

My very best,

JPR



> Message: 7
> Date: Mon, 17 Jul 2017 11:43:12 -0700
> From: Justin Leavens <jus...@jitbusiness.com>
> To: 4D iNug Technical <4d_tech@lists.4d.com>
> Subject: Re: Arrays vs Object for Key/Value pair lookups
> Message-ID:
>       <CABwcA3un5GoYVWrFeRXzpm8bNuOtSdaymO9=byk-d_c1vp5...@mail.gmail.com>
> Content-Type: text/plain; charset="UTF-8"
> 
> I did a 2014 Summit presentation (5 JSON Tips) which should be available
> for download that demonstrated the benefits of using objects for key/value
> pair cache lookups, but in the end it’s pretty easy to demonstrate. The
> benefits start to show up with a few hundred keys, but at 100,000 it’s
> easily 20x faster looking up object keys as opposed to find in array in
> interpreted. And when you compile, it’s literally hundred of times faster
> (400-500x) at 100k keys - and the benefits just get bigger and bigger with
> more keys. That’s both for filling the cache and for retrieving values
> (objects save you from having to check if a key is already in the array
> before adding it).
> 
> --
> Justin Leavens
> jus...@jitbusiness.com   (818) 986-7298 x <//(818) 986-7298 x301>701
> Just In Time Consulting, Inc.
> Custom software for unique businesses
> http://www.linkedin.com/in/justinleavens
> 
> On July 17, 2017 at 3:46:26 AM, Peter Jakobsson via 4D_Tech (
> 4d_tech@lists.4d.com) wrote:
> 
> Hi
> 
> I remember at last year’s summit, JPR was emphasising how objects were far
> more optimised than arrays for doing lookups over large numbers of key
> value pairs.
> 
> e.g. we usually do this:
> 
> $x:=find in array(myKEYS;”product_code_x”)
> 
> if($x>0)
> $0:=myPRICES{$x}
> end if
> 
> How do people prefer to do this with objects ? Enumerate the keys in some
> systematic way and then populate the object like this >
> 
> For($i;1;$SIZE)
> 
> $key:=string($i)
> $value:=myarrayVAL{$i}
> OB SET($object;$key;$value)
> 
> End For
> 
> Then for retreiving:
> 
> $key:=string($1)
> 
> $0:=OB Get($object;$key)
> 
> …or was JPR suggesting we use object arrays and do some kind of “find” over
> the object arrays ?
> 
> Best Regards
> 
> Peter
> 

**********************************************************************
4D Internet Users Group (4D iNUG)
FAQ:  http://lists.4d.com/faqnug.html
Archive:  http://lists.4d.com/archives.html
Options: http://lists.4d.com/mailman/options/4d_tech
Unsub:  mailto:4d_tech-unsubscr...@lists.4d.com
**********************************************************************

Reply via email to