Parameter
Description
Determines if at least one value of a key-value pair in a struct satisfies a given condition.
Returns
True if at least one value matches a condition; false, otherwise.
Syntax
structSome(struct, function(key, value [,struct]){} [, parallel] [, maxThreads])
Member function
structObj.Some(callback)
History
ColdFusion (2021 release): Introduced the following parameters:
- parallel
- maxThreadCount
ColdFusion (2018 release) Update 5: Added this function.
Parameters
|
|
Required/Optional |
Description |
|---|---|---|
|
struct |
Required |
Struct in which at least one value is to be searched. |
|
callback |
Required |
Function that encapsulates the criteria. |
|
parallel |
Optional |
(Boolean)- True if you want to enable parallel programming. |
|
maxThreads |
Optional |
(Int) The number of threads the function can execute. The number of threads must be between 1-50. If the value exceeds 50, there is an exception. |
Example
Example 1
<cfscript>
mystruct = {a=1,b=2,c=3};
doesValExist=(key,value,struct)=>return value==1
writeoutput(structSome(mystruct,doesValExist))
</cfscript>
Output
YES
Example 2
<cfscript>
structEven={a=2,b=4,c=8,d=10,e=12}
isEven=(key,value)=>value%2==0
writeOutput(StructSome(structEven,isEven)) // Returns True
</cfscript>
Output
YES
Member function
<cfscript>
structEven={a=2,b=4,c=8,d=10,e=12}
isEven=(key,value)=>return value%2==0
writeOutput(structEven.Some(isEven)) // Returns True
</cfscript>
Member function - Using arrow operator
<cfscript>
ordstruct=["key1":"abc","key2":"def","key3":"sss"]
lambdaFunc= key => key.contains("key")
writeOutput(ordstruct.Some(lambdaFunc))
</cfscript>
Exampe 3 - Named parameters
<cfscript>
mystruct={"key1":"aval","key2":"bval","key3":"cval"}
result=StructSome(struct=mystruct,callback=function(key,val){
if (key.contains("key1") && val.startswith("a"))
return 1
else
return 0
}
)
writeOutput(result)
</cfscript>
Output
YES
Using parallelization
<cfscript>
mystruct= Structnew("ordered");
for(i=1;i<=10000;i++){
mystruct.insert("key#i#","val#i#")
}
function callback(key,val){
if(isObject(val))
return true
return false
}
t_start=GetTickCount()
writeoutput(mystruct.some(callback))
t_end=GetTickCount()
writeoutput("<br>Time taken with no parallel:" & t_end-t_start)
t_start=GetTickCount()
writeoutput(mystruct.some(callback,true,5));
t_end=GetTickCount()
writeoutput("<br>Time taken with 5 threads:" & t_end-t_start)
t_start=GetTickCount()
writeoutput(mystruct.some(callback,true,10))
t_end=GetTickCount()
writeoutput("<br>Time taken with 10 threads:" & t_end-t_start)
t_start=GetTickCount()
writeoutput(structsome(struct=mystruct,callback=callback,parallel=true,maxthreadcount=20))
t_end=GetTickCount()
writeoutput("<br>Time taken with 20 threads:" & t_end-t_start)
t_start=GetTickCount()
writeoutput(structsome(struct=mystruct,callback=callback,parallel=true,maxthreadcount=40))
t_end=GetTickCount()
writeoutput("<br>Time taken with 40 threads:" & t_end-t_start)
</cfscript>