Yes, although if you used hard-coded numbers you'd have to quote them, and otherwise you'll have to use array notation anyway, although I suspect it'll still work with array notation... but I don't think you can write in stTest.1098... I think it has to be stTest[x] or stTest["1098"] ... but then that's conjecture, I haven't tried it in mx recently...
MX probably doesn't need to use space for the variable for an unassigned array cell... however... it does need to allocate space for a pointer to that value... in memory, the array looks kinda like this: m[l4][p1][p2][p3][p4] with l4 representing the length of the array and each p# entry being a pointer to a variable for that cell... so when you go grab a given cell the JVM just adds the integer index to the memory address for the array to get the memory address for the pointer for that value, which is generally more efficient than the hash for a structure. If the cell is unassigned, the pointer is null... but it still requires that memory for the pointer. At least -- that's the impression I've been under... I could be wrong. Isaac > My colleague claims there's no memory usage for empty > array cells, but I > disagree. With CFMX you do not have to declare your sub > structures with > structnew(). CFMX assumes it's a structure and creates it > as such. So > you can do stTest.1098.1.3 and have a structure of > structure without > declaring the sub structures. > Thanks > -----Original Message----- > From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] > Sent: Thursday, August 28, 2003 11:22 AM > To: [EMAIL PROTECTED] > Subject: RE: structures vs arrays > It may or may not be more efficient to do this in a > structure ... I > would guess that it probably won't ever be less efficient > to do it with > a structure if your array is always going to be tens of > thousands of > entries... I don't know personally if CF stores a value > for each empty > entry in the array -- I know it has to at least store the > length of the > array somewhere, but it may or may not store an empty > string value for > each empty element. I suspect it doesn't. Though afaik it > still has to > allocate memory in order to determine if there is a value > for a given > item in the array (if no value was set, the memory address > reads null > which the CF Server then returns as an empty string). > Although I would probably use a structure of structures > (which will > sound/seem strange because the syntax will in most cases > be the same as > for an array), rather than a single structure... i.e. > stTest = structnew(); > stTest["1098"] = structnew(); > stTest["1098"]["1"] = structnew(); > stTest["1098"]["1"]["3"] = "5/15/2003"; > Although because in most cases you won't be hard-coding > the values, the > syntax will be identical to a 3-d array, i.e. > stText[x][y][z]; > My reason for using a structure has more to do with the > code than with > the efficiency -- I suspect it'd be a close call and you'd > have to > actually load-test it (if only in a rudimentary way) to > know which is > more efficient. I don't personally like seeing all those > empty cells, > which is why I prefer the structure approach. > ike > ------ Original Message ------ > From: Schreck, Tom <[EMAIL PROTECTED]> > To: <[EMAIL PROTECTED]> > Sent: Aug 28, 2003 10:55 AM > Subject: RE: structures vs arrays >>Here's an example: >> >><cfscript> >> arTest = arraynew(3); >> arTest[1098][1][3] = '5/15/2003'; >> arTest[2034][3][6]= '7/15/2003'; >> arTest[156][2][5]= '4/15/2003'; >></cfscript> >> >><cfoutput> >>array length: #arraylen(arTest)# >></cfoutput> >> >><cfdump var="#arTest[156][2][5]#"> >><cfdump var="#arTest[1098][1][3]#"> >><cfdump var="#arTest#"> >> >> >>If you look at the dump of arTest, you will see thousand >>of empty array >>cells. Does CF store these empty array cells in memory? >>I'm having an >>interesting discussion with a colleague as to why this is >>a bad idea >>because it's not very efficient. Keep in mind this array >>will be 10s > of >>thousands of entries long. >> >>Would a structure containing the concatenated key be more >>efficient? >> >><cfscript> >> stTest = structnew(); >> stTest['1098_1_3'] = '5/15/2003'; >> stTest['2034_3_6'] = '7/15/2003'; >> stTest['156_2_5'] = '4/15/2003'; >></cfscript> >> >><cfdump var="#stTest#"> >> >> >> >>Thanks - >> >>Tom Schreck >>817-252-4900 >>[EMAIL PROTECTED] >> >>I have not failed. I've found 10,000 ways that won't >>work. >> >>- Thomas Edison >> >> >>-----Original Message----- >>From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] >>Sent: Thursday, August 28, 2003 10:53 AM >>To: [EMAIL PROTECTED] >>Subject: RE: structures vs arrays >> >>Or extremely high traffic on a given page yea... Most of >>the time I >>don't generally put a lot of thought into which is more >>(or less) >>efficient -- I write what's easiest to implement and >>easiest to change >>or expand on later. When I have a project that's having a >>problem >>handling the load (which is fairly uncommon), then I look >>for tweaks to >>make it more efficient. >> >> >>------ Original Message ------ >>From: Dan Blackman <[EMAIL PROTECTED]> >>To: <[EMAIL PROTECTED]> >>Sent: Aug 28, 2003 09:56 AM >>Subject: RE: structures vs arrays >> >>>It's also negligible unless you are working with >>>hundereds of > thousands >>>of rows in MHO. You are not going to see the difference >>>until you are >>>hitting a sizable recordset... >>> >>>My 2 c >>> >>>-----Original Message----- >>>From: [EMAIL PROTECTED] >>>[mailto:[EMAIL PROTECTED] On >>>Behalf Of S.Isaac Dealey >>>Sent: Thursday, August 28, 2003 9:41 AM >>>To: [EMAIL PROTECTED] >>>Subject: Re: structures vs arrays >>> >>> >>>> Which one is more efficient at retrieving data: >>>> structure >>>> or an array? >>> >>>Depends what you're doing with it... >>> >>>A structure is faster at finding a key than it is to find >>>a given >>string >>>within an array... i.e. >>> >>>idx = structkeyexists(mystruct,"blah") >>> >>>vs. something like this: >>> >>>idx = listfind(arraytolist(myarray),"blah") >>> >>>or worse >>> >>>idx = 0; >>>for (x = 1; x lte arraylen(myarray); x = x + 1) { >>> if (myarray[x] is "blah") { idx = x; break; } >>>} >>> >>>I believe arrays are slightly faster when looping over >>>them, i.e. >>> >>><cfloop index="x" from="1" >>>to="#arraylen(myarray)#"></cfloop> >>> >>>vs. >>> >>><cfloop item="x" collection="#mystruct#"></cfloop> >>> >>>and I'm pretty sure getting a single value from an array >>> >>>myarray[3] >>> >>>is faster than getting a single value from a structure >>> >>>mystruct["blue"] >>> >>>I hope that's helpful. :) >>> >>>s. isaac dealey 972-490-6624 >>> >>>team macromedia volunteer >>>http://www.macromedia.com/go/team >>> >>>chief architect, tapestry cms http://products.turnkey.to >>> >>>onTap is open source >>>http://www.turnkey.to/ontap >>> >>> >>>----------------------------------------------- >>>To post, send email to [EMAIL PROTECTED] >>>To unsubscribe: >>> Send UNSUBSCRIBE to [EMAIL PROTECTED] >>>To subscribe / unsubscribe: http://www.dfwcfug.org >>> >>>----------------------------------------------- >>>To post, send email to [EMAIL PROTECTED] >>>To unsubscribe: >>> Send UNSUBSCRIBE to [EMAIL PROTECTED] >>>To subscribe / unsubscribe: http://www.dfwcfug.org >> >> >> >> >>----------------------------------------------- >>To post, send email to [EMAIL PROTECTED] >>To unsubscribe: >> Send UNSUBSCRIBE to [EMAIL PROTECTED] >>To subscribe / unsubscribe: http://www.dfwcfug.org >> >>----------------------------------------------- >>To post, send email to [EMAIL PROTECTED] >>To unsubscribe: >> Send UNSUBSCRIBE to [EMAIL PROTECTED] >>To subscribe / unsubscribe: http://www.dfwcfug.org > ----------------------------------------------- > To post, send email to [EMAIL PROTECTED] > To unsubscribe: > Send UNSUBSCRIBE to [EMAIL PROTECTED] > To subscribe / unsubscribe: http://www.dfwcfug.org > ----------------------------------------------- > To post, send email to [EMAIL PROTECTED] > To unsubscribe: > Send UNSUBSCRIBE to [EMAIL PROTECTED] > To subscribe / unsubscribe: http://www.dfwcfug.org s. isaac dealey 972-490-6624 team macromedia volunteer http://www.macromedia.com/go/team chief architect, tapestry cms http://products.turnkey.to onTap is open source http://www.turnkey.to/ontap ----------------------------------------------- To post, send email to [EMAIL PROTECTED] To unsubscribe: Send UNSUBSCRIBE to [EMAIL PROTECTED] To subscribe / unsubscribe: http://www.dfwcfug.org
