Jos*_*ody 13 arrays algorithm coldfusion search struct
我在ColdFusion中有一个半大(数百个记录)的1维数组.数组中的每个项都是具有多个属性的结构.我想在数组中搜索具有特定"name"属性的结构.我知道对于一个字符串值数组,我可以使用Java方法,如下所示:
<cfset arrayIndex = myArray.indexOf("WhatImLookingFor") + 1>
Run Code Online (Sandbox Code Playgroud)
...但这对结构数组不起作用.我也知道我可以这样蛮力:
<cfset arrayIndex = 0>
<cfloop from="1" to="#ArrayLen(myArray)#" index="counter">
<cfif myArray[counter].name IS "WhatImLookingFor">
<cfset arrayIndex = counter>
</cfif>
</cfloop>
Run Code Online (Sandbox Code Playgroud)
......但我觉得必须有一种更有效的方法.有人有比这更好的解决方案吗?您可以假设每个结构中都存在"name"属性,并且数组中没有间隙或其他对象.
Sol*_*nal 11
除非您在构建阵列时创建了哈希表,否则我不会看到您将如何创建比您发布的O(n)解决方案更快的搜索功能.无论如何,在构建数组时,您可以执行以下操作:
<cfloop query="qryValues">
<cfset nameValues[name] = currentrow />
<cfset myArray[currentrow].name = name />
</cfloop>
<cfset arrayIndex = nameValues["WhatImLookingFor"] />
Run Code Online (Sandbox Code Playgroud)
这假定值始终存在.在进行调用之前,您可能需要检查StructKeyExists(nameValues,"WhatImLookingFor").
在CF 10或Railo 4中,您可以使用:
arrayIndex = ArrayFind(arrayOfStructs, function(struct){
return struct.name == "WhatImLookingFor";
});
Run Code Online (Sandbox Code Playgroud)
它没有记录,但它的工作原理!如果您想要所有索引,ArrayFindAll()也是一个选项.