[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 **********************************************************************