我有很多结构,我正在使用 StructFindValue() 来确定一个键是否多次出现。
我得到了为“singles”返回的预期数组,但是我得到了一个用于“doubles”和“triples”的空数组 - 此代码实际上位于不同的代码段内,-my 本身就是一个结构......
如果我尝试任何一行“x= StructFindValue(y, 3, 'all');” 在一个独立的模板中 - CF 找到 '2' 和 '3' 值就好了 - 我得到一个包含数据的数组 - 但在上面的代码中 - 只有 '1' 的值返回任何东西......
我很困惑。
更新
好的,为了响应更多信息的请求,我的服务器详细信息是:
Version ColdFusion 10,282462
Edition Developer
Operating System Windows XP
Java Version 1.6.0_29
OS Version 5.1
Update Level /C:/ColdFusion10/cfusion/lib/updates/chf10000002.jar
Adobe Driver Version 4.1 (Build 0001)
从下面的代码示例中可以看出,我的数组有几个不同的名称,具有不同的重复性质。我想知道哪些值重复了指定的次数。如上所述,structkeyFind()
如果(并且仅)在1
. 它不适用于 , 的键值2
(3
或 4 或 5 等,为简洁起见,此处不包括在内)。
<cfscript>
_myArry = listToArray('bob,bob,bob,joe,jane,jane,john,john,john,alex,greg');
_myStats = getDataStats( _myArry );
writeDump( _myStats );
</cfscript>
<cffunction name="getDataStats">
<cfargument name="data" required="yes" type="array" >
<cfscript>
var _hv = {};
// default some values
_hv.vals = {};
_hv.threes = false;
_hv.twos = false;
_hv.ones =false;
// loop the data put it into separate containers
for ( var i=1; i LTE arrayLen( arguments.data ); i++ ) {
switch ( lcase( arguments.data[i] ) ) {
case 'bob': // bob
if ( structKeyExists( _hv.vals, 'bob' ) ) { _hv.vals.bob = _hv.vals.bob + 1; }
else { _hv.vals.bob = 1; }
break;
case 'joe': // joe
if ( structKeyExists( _hv.vals, 'joe' ) ) { _hv.vals.joe = _hv.vals.joe + 1; }
else { _hv.vals.joe = 1; }
break;
case 'jane': // jane
if ( structKeyExists( _hv.vals, 'jane' ) ) { _hv.vals.jane = _hv.vals.jane + 1; }
else { _hv.vals.jane = 1; }
break;
case 'john': // john
if ( structKeyExists( _hv.vals, 'john' ) ) { _hv.vals.john = _hv.vals.john + 1; }
else { _hv.vals.john = 1; }
break;
case 'alex': // alex
if ( structKeyExists( _hv.vals, 'alex' ) ) { _hv.vals.alex = _hv.vals.alex + 1; }
else { _hv.vals.alex = 1; }
break;
case 'greg': // greg
if ( structKeyExists( _hv.vals, 'greg' ) ) { _hv.vals.greg = _hv.vals.greg + 1; }
else { _hv.vals.greg = 1; }
break;
}
}
// give me a return struct for testing so i can 'see' where I'm at
var _thisReturn = {
'threes' = StructFindValue( _hv.vals, 3, 'all' ),
'twos' = StructFindValue( _hv.vals, 2, 'all' ),
'ones' = StructFindValue( _hv.vals, 1, 'all' ),
'values' = arguments.data
};
</cfscript>
<cfreturn _thisReturn />
</cffunction>
为了尝试“转换”这些值,我尝试了这些变体中的每一个。然而,结果与原始结果没有变化。
'ones' = StructFindValue( _hv.vals, '1', 'all' ),
'twos' = StructFindValue( _hv.vals, '2', 'all' ),
'threes' = StructFindValue( _hv.vals, '3', 'all' ),
进而
'ones' = StructFindValue( _hv.vals, val( 1 ), 'all' ),
'twos' = StructFindValue( _hv.vals, val( 2 ), 'all' ),
'threes' = StructFindValue( _hv.vals, val( 3 ), 'all' ),