パラメーター
最終更新日 :
2021年4月28日
説明
構造体に含まれているキーと値のペアの少なくとも 1 つの値が指定の条件を満たしているかどうかを判定します。
戻り値
1 つ以上の値が条件に一致する場合は true、それ以外の場合は false。
シンタックス
structSome(struct, function(key, value [,struct]){} [, parallel] [, maxThreads])
structSome(struct, function(key, value [,struct]){} [, parallel] [, maxThreads])
structSome(struct, function(key, value [,struct]){} [, parallel] [, maxThreads])
メンバー関数
structObj.Some(callback)
structObj.Some(callback)
structObj.Some(callback)
履歴
ColdFusion(2021 リリース):次のパラメーターが導入されました。
- parallel
- maxThreadCount
ColdFusion(2018 リリース)アップデート 5:この関数が追加されました。
パラメーター
|
必須/オプション |
説明 |
---|---|---|
struct |
必須 |
少なくとも 1 つの値が検索される構造体。 |
callback |
必須 |
条件をカプセル化した関数。 |
parallel |
オプション |
(ブール値)- 並列プログラミングを有効にする場合は true を指定します。 |
maxThreads |
オプション |
(整数)この関数が実行できるスレッドの数です。 スレッド数は 1~50 にする必要があります。値が 50 を超えると、例外が発生します。 |
例
例 1
<cfscript>
mystruct = {a=1,b=2,c=3};
doesValExist=(key,value,struct)=>return value==1
writeoutput(structSome(mystruct,doesValExist))
</cfscript>
<cfscript>
mystruct = {a=1,b=2,c=3};
doesValExist=(key,value,struct)=>return value==1
writeoutput(structSome(mystruct,doesValExist))
</cfscript>
<cfscript> mystruct = {a=1,b=2,c=3}; doesValExist=(key,value,struct)=>return value==1 writeoutput(structSome(mystruct,doesValExist)) </cfscript>
出力
YES
例 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>
<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>
<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>
出力
YES
メンバー関数
<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>
<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>
<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>
メンバー関数 - アロー演算子の使用
<cfscript>
ordstruct=["key1":"abc","key2":"def","key3":"sss"]
lambdaFunc= key => key.contains("key")
writeOutput(ordstruct.Some(lambdaFunc))
</cfscript>
<cfscript>
ordstruct=["key1":"abc","key2":"def","key3":"sss"]
lambdaFunc= key => key.contains("key")
writeOutput(ordstruct.Some(lambdaFunc))
</cfscript>
<cfscript> ordstruct=["key1":"abc","key2":"def","key3":"sss"] lambdaFunc= key => key.contains("key") writeOutput(ordstruct.Some(lambdaFunc)) </cfscript>
例 3 - 名前付きパラメーター
<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>
<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>
<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>
出力
YES
並列処理の使用例
<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>
<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>
<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>