2011-07-13 5 views
3

これはcoldfusionについてです...構造体が配列に挿入される前に構造体が存在するかどうかをテストする最良の方法は何ですか?

私は構造体の配列を持っています。 この配列を挿入する前に配列に配列がすでに存在するかどうかをテストする最良の方法は何ですか? これをcontains(javacast(...))でテストすることは可能でしょうか?

は ミシェル

最後に、私はコードの部分を追加する方法を見つけ、事前にありがとう:)

<cfset count = 0> 
<cfset foo = []> 
<cfif this struct does not exists in the array...> 
    <cfset count = count + 1> 
    <cfset foo[count] = {key = currentBar.getValue(), value = anotherValueVar} 
</cfif> 

希望これは...

は、 ミシェルありがとう助けます

+0

明快にするためにいくつかの例(あなたが持っているものと期待しているもの)を追加してください。 – Sergii

+0

@Sergii、ここにコードの一部です:) – michel

答えて

3

CF9:

if (!ArrayContains(structs, struct)) 
    arrayAppend(structs, struct); 

CF8では、Javaのcontains()をjava.util.Listで試してみてください。代わりに、構造体の配列を使用しての

if (structs.contains(struct)) 
    arrayAppend(foo, struct); 
+0

例コード:(しかし、私は新しい回答を作らなければならないことがわかります:) – michel

+0

申し訳ありませんが、私は常にCF8にいるとは言いませんでした。私はarrayContainsがCF9で来ていると思います... – michel

+1

@Michel - はい、CF8はArraysContainsをサポートしていません。あなたの構造はどれくらい大きいですか?それが小さければ、ループするかもしれません。ここにいくつかの他のアイデアhttp://www.coldfusioncookbook.com/entry/35/How-do-I-find-a-value-in-an-arrayちょうど基になる/文書化されていないものを使用することを心がけてください* somtimes *トリッキーです。通常のCFコードでは見つからないニュアンス/問題点があることがよくあります。たとえば、大文字と小文字の区別。 – Leigh

2

クエリを使用し、それにselect distinctクエリーオブクエリーを実行します。CF配列はので、私は、これは動作します推測のjava.util.Vectorを拡張します。

<cfscript> 
    q = QueryNew('key,value'); 

    // add a row to the query 
    QueryAddRow(q, 1); 
    QuerySetCell(q, 'key', currentBar.getValue()); 
    QuerySetCell(q, 'value', anotherValueVar); 

</cfscript> 
<!--- Now that all the (non-distinct) rows have been added. ---> 
<cfquery name="dq" dbtype="query"> 
    <!--- Have to escape the names "key" and "value" with brackets 
      because they are reserved words in CF queries. ---> 
    select distinct [key], [value] from q 
</cfquery> 
+0

私はたぶんこのためにクエリに変換しないでしょう。しかし、あなたは興味深い点を挙げています。目標が異なる値である場合、構造体は配列よりも優れた選択肢になります。構造体には固有のキーしか格納されません。したがって、 'は一意の値になるはずです。 – Leigh

+0

@Leigh:はい、それはうまくいくでしょう。 'foo [theKey] [theValue] = {key = theKey、value = theValue}'のネストした構造体を使うことで、文字列の連結を避けることもできます。もちろん、{key、value}のペアを実際に格納する理由はありません(おそらく便利ですが)。その情報はキー自体で利用できるためです。 – Josh

+0

_ ** EDIT_真。理由はおそらく便利だと思います;)**構造体をキーとして使用することもできます。すなわち 'foo [theStruct] = theStruct'です。複雑なオブジェクトには効果があるかどうかは分かりませんが、ショットに値する価値はあります。 – Leigh

関連する問題