Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java coldfusion在数组中查找结构_Java_Arrays_Coldfusion_Coldfusion 9 - Fatal编程技术网

Java coldfusion在数组中查找结构

Java coldfusion在数组中查找结构,java,arrays,coldfusion,coldfusion-9,Java,Arrays,Coldfusion,Coldfusion 9,我有一个对象,它包含一个结构数组,生成该数组的代码在查询上循环,从查询的每一行获取各种值并填充一个结构,当该行完成时,它将其附加到数组中,然后该过程再次开始: <cfscript> variables.x = 1; variables.aArray = []; // loop over my query while(variables.x lte variables.qQuery.recordcount){ variables.stSt

我有一个对象,它包含一个结构数组,生成该数组的代码在查询上循环,从查询的每一行获取各种值并填充一个结构,当该行完成时,它将其附加到数组中,然后该过程再次开始:

<cfscript>
    variables.x = 1;
    variables.aArray = [];
    // loop over my query
    while(variables.x lte variables.qQuery.recordcount){
        variables.stStruct          = {};
        variables.stStruct.nID      = variables.qQuery.id[variables.x];
        variables.stStruct.sText    = variables.qQuery.text[variables.x];

        //etc...

        arrayAppend(variables.aArray,variables.stStruct);
        variables.x++;
    }
    variables.oObject.setArray(variables.aArray);
</cfscript>

变量x=1;
variables.aArray=[];
//循环我的查询
while(variables.x lte variables.qQuery.recordcount){
variables.stStruct={};
variables.stStruct.nID=variables.qQuery.id[variables.x];
variables.stStruct.sText=variables.qQuery.text[variables.x];
//等等。。。
arrayAppend(variables.aArray,variables.stStruct);
变量.x++;
}
variables.ooobject.setArray(variables.aArray);
稍后,在我的代码中,我希望能够仅使用nID来获取该数组中项目的详细信息。我不知道nID的数组位置,这意味着使用一种复杂的方法试图找到它

我有一个想法,通过修改上面的代码,在它旁边创建一个位置结构

<cfscript>
    variables.x   = 1;
    variables.aArray = [];
    variables.stTracker = {};

    while...yadda
         variables.stStruct = {};
         yadda yadda

         structInsert(variables.stTracker,"variables.qQuery.id[variables.x]","variables.x");
         variables.x++;

    while end

    variables.oObject.setArray(variables.aArray);
    variables.oObject.setTracker(variables.stTracker);
</cfscript>

变量x=1;
variables.aArray=[];
variables.stTracker={};
而…雅达
variables.stStruct={};
雅达雅达
structInsert(variables.stTracker,“variables.qQuery.id[variables.x],“variables.x”);
变量.x++;
当结束时
variables.ooobject.setArray(variables.aArray);
variables.ooobject.setTracker(variables.stTracker);
这意味着我可以执行类似于
variables.nPosition=structFindKey(variables.oObject.getTracker(),'88')[1]的操作。这仍然感觉很不雅观,我想知道我是否错过了一些比我现在做的容易得多的东西


如果有一个使用java的解决方案来解决这个问题,我会非常高兴。

我建议执行。它将允许您使用SQL语句查询内存中的现有结果集。这是假设您需要的所有数据都已经在现有查询中可用(听起来像是来自您的问题)

查询的一个示例查询是:

<cfquery dbtype="query" name="qoqexample">  
    SELECT id, text, other_columns 
    FROM variables.qQuery 
    WHERE id = <cfqueryparam cfsqltype="cf_sql_integer" value="#nID#">
</cfquery> 

选择id、文本、其他_列
从variables.qQuery
其中id=

您可以使用Java
LinkedHashMap
,它的工作原理与结构类似,但将保持添加元素的顺序。这意味着您根本不需要使用阵列(不清楚这是否是您的问题)

您将能够在该对象上使用所有本机
CF
函数,就像使用普通结构一样

var container = createObject("java", "java.util.LinkedHashMap").init();
for (var x = 1; x <= qQuery.recordCount; x++) {
  container[qQuery['nid'][x]] = qQuery['stext'][x];
}

我认为您考虑过的另一个选项是将
nid
映射到数组索引位置,作为

var keys = {};
var container = [];
for (var x = 1; x <= qQuery.recordCount; x++) {
  var item = {};
  item[qQuery['nid'][x]] = qQuery['stext'][x];

  container[x] = item;
  keys[qQuery['nid'][x]] = x;
}
var-keys={};
var容器=[];

对于(var x=1;xCFLib.org),它似乎有一个可能的候选者:


项目添加到数组中的顺序重要吗?不重要,但现在它们进入数组的顺序与我的非常相似,但是查询的顺序出来了。使用此解决方案,我假设您建议我在对象上使用查询,例如
variables.oObject.setQuery(variables.qQuery)
然后在我需要访问QoQ信息时运行QoQ。这是一个解决方案,但如果是这样的话,就不是一个优雅的解决方案。不,我不是建议你将查询添加到你的对象中。我可能不理解你的全部代码,但我假设你可以像现在一样将对象和查询作为单独的实体保留。如果你需要d要查询结果集,请从
变量.qQuery
variable.ahh查询来自DAO,在DAO中有一个填充对象的函数…因此,一旦填充对象,查询就不再存在,因此我必须使用原始查询填充对象上的setter,以使此解决方案起作用。我想我可能是想把事情搞得一团糟,把它变成一个结构的结构,这样就不需要LinkedHashMap了。Re:这就不需要LinkedHashMap了。不像CF结构,LinkedHashMap有一个“可预测的迭代顺序”。从某种意义上说,它结合了数组和结构的特性。如果您需要保持元素的顺序,这与标准CF结构有很大的区别。这是真的,但出于我自己的需要,因为不需要保持顺序,LinkedHashMap只需要一个结构的结构就行了。但是好建议@Leigh@Jareded-(编辑)啊,好的。我错过了注释提及顺序并不重要。在这种情况下,你是对的。结构的结构是最简单的。然后你可以通过id查找。对于数组,除了循环查找“id”上的匹配项外,真的没有其他选择。
var keys = {};
var container = [];
for (var x = 1; x <= qQuery.recordCount; x++) {
  var item = {};
  item[qQuery['nid'][x]] = qQuery['stext'][x];

  container[x] = item;
  keys[qQuery['nid'][x]] = x;
}
<cfscript>
/**
 * Returns the position of an element in an array of structures.
 * 
 * @param array      Array to search. (Required)
 * @param searchKey      Key to check in the structs. (Required)
 * @param value      Value to search for. (Required)
 * @return Returns the numeric index of a match. 
 * @author Nath Arduini (nathbot@gmail.com) 
 * @version 0, June 11, 2009 
 */
function arrayOfStructsFind(Array, SearchKey, Value){
    var result = 0;
    var i = 1;
    var key = "";
    for (i=1;i lte arrayLen(array);i=i+1){
        for (key in array[i])
        {
            if(array[i][key]==Value and key == SearchKey){
                result = i;
                return result;
            }
        }
    }

    return result;
}
</cfscript>
ArrayOfStructsFind(variables.oObject.getArray(),"nID","12345")