web-dev-qa-db-ja.com

ColdFusionで2つの配列を結合する

JavaScriptのarray.concat()と同様に、ColdFusionで2つの配列を結合する組み込みの方法はありますか?

35
Yisroel

実際にはそうではありませんが、Javaを使用してください。 :)

<cfset foo = [1,2,3]>
<cfset bar = [4,5,6]>
<cfset foo.addAll( bar )>

参照: JavaのコレクションインターフェイスAPI

ソース: http://www.aliaspooryorik.com/blog/index.cfm/e/posts.details/post/merging-two-arrays-267

48
Henry
45
Henry

Railo を使用している場合は、 ArrayMerge を使用できます(例:<cfset NewArray=ArrayMerge(FirstArray,SecondArray)>)。

8
Gert Grenander

コールドフュージョンがスクリプト言語に期待される多くの基本的な機能を見逃しているのは、ちょっとばかげています。これは私がすぐに書かなければならなかったものです。

<cffunction name="mergeArrays" returntype="array" >
    <cfargument name="array1" type="array" required="true" >
    <cfargument name="array2" type="array" required="true" >

    <cfset arrayResult = arrayNew(1) >
    <cfloop array="#array1#" index="elem">
        <cfset arrayAppend(arrayResult,elem) >
    </cfloop>

    <cfloop array="#array2#" index="elem">
        <cfset arrayAppend(arrayResult,elem) >
    </cfloop>

    <cfreturn arrayResult>
</cffunction>
7
noj

CF10またはRailo4では、 nderscore.cfcライブラリ のconcat()関数を使用して、(既存の配列を変更せずに)他の2つの配列を連結した新しい配列を取得できます。 cfscriptの例:

newArray = _.concat([1], [2]);

結果:

// newArray == [1, 2]

このメソッドを使用して新しい配列を取得する方が、新しい配列を作成してArrayAppendを2回呼び出すよりも少しクリーンです。

(免責事項:私はUnderscore.cfcを書きました)

1
Russ

Javascriptでは、array.join(s)は、区切り文字sで区切られた配列のすべての要素から文字列を作成します。これに似たColdFusionの関数は、ArrayToList関数です。配列を別の配列に追加する限り、そのためのCF関数はないと思います。 CFの配列関数のリストを確認するには、 http://livedocs.Adobe.com/coldfusion/8/htmldocs/help.html?content=functions-pt0_03.html#3473387 を確認してください。または、次のようなものを試してください。

 <cfscript> 
 for(index = 1; index LTE ArrayLen(array2); i = i + 1){
 ArrayAppend(array1 、array2 [i]); 
} 
 </ cfscript> 
0
Joel Anderson

次のように2つのリストを簡単に連結できます。

<cfset combolist = ListAppend(lista,listb, ",")>

したがって、最初にArrayToList()を使用して2つの配列をリストに変換します。 2つのリストをListAppend()と組み合わせてから、ListToArray()を使用して回答を配列に変換し直します。

これがどれほど効率的かはわかりませんが、コードは非常に単純です。 arrayAppend()を使用したいのですが、ColdFusion8を使用しています。

0
Betty Mock

これをBenNadelから取得し、暗号化とハッシュを実行するために使用しました。チャームのように働いた!

<cfscript>
    // Note: BinaryDecode/CharsetDecode return Java arrays. 
    // Unlike CF arrays, Java arrays are immutable, 
    // so the Java addAll(..) method to merge arrays won't work here. 
    // http://stackoverflow.com/a/10760835/104223

    // function to merge immutable arrays the long way
    function mergeArrays( array1, array2 ){
        var i = 0;
        var newArray = [];
        for (i = 1; i <= arrayLen(arguments.array1); i++) {
            arrayAppend(newArray, arguments.array1[i]);
        }
        for (i = 1; i <= arrayLen(arguments.array2); i++) {
            arrayAppend(newArray, arguments.array2[i]);
        }
        return newArray;
    }


    //convert the saltArray string and CustomerID string to UTF-8 byte arrays.
    saltByteArray = charsetDecode(salt, "utf-8");
    CustomerIdByteArray = charsetDecode(CustomerId, "utf-8");

    //create a new byte array consisting of the CustomerId bytes
    //appended with the salt bytes by merging the two binary arrays 
    //via custom function, mergeArrays
    mergedBytes = mergeArrays( CustomerIdByteArray, saltByteArray );
</cfscript>
0
Faith Sloan