I have a semi-large (hundreds of records) 1-dimensional array in ColdFusion. Each item in the array is a struct with several properties. I want to search the array for a struct that has a specific "name" property. I know that for an array of string values I could use Java methods like so:
<cfset arrayIndex = myArray.indexOf("WhatImLookingFor") + 1>
...but that won't work for an array of structs. I also know I could brute-force it like this:
<cfset arrayIndex = 0>
<cfloop from="1" to="#ArrayLen(myArray)#" index="counter">
<cfif myArray[counter].name IS "WhatImLookingFor">
<cfset arrayIndex = counter>
</cfif>
</cfloop>
...but I feel like there must be a more efficient way. Does anyone have a better solution than this? You can assume that the "name" property is present in every struct and there are no gaps or other objects in the array.
Unless you have a hash table you're creating as you build the array, I don't see how you're going to create a search function that is faster than the O(n) solution you've posted. Anyway, while you are building your arrays, you could do something like this:
<cfloop query="qryValues">
<cfset nameValues[name] = currentrow />
<cfset myArray[currentrow].name = name />
</cfloop>
<cfset arrayIndex = nameValues["WhatImLookingFor"] />
This assumes that the value always exists. You may need to check StructKeyExists(nameValues, "WhatImLookingFor") before making the call.