コールドフュージョンリストまたは配列に個別の値を適用する簡単な方法があるかどうか疑問に思いました。
ありがとう
コールドフュージョンリストまたは配列に個別の値を適用する簡単な方法があるかどうか疑問に思いました。
ありがとう
<cfset temp = structNew()>
<cfloop list="a,b,c,a,c" index="i">
<cfset temp[i] = "">
</cfloop>
<cfset distinctList = structKeyList(temp)>
これは私が考えることができる最も簡単な解決策です。これの短所は、順序が保持されず、リスト項目で大文字と小文字が区別されないことです。大文字と小文字を区別しない必要がある場合は、Javaのハッシュセットを使用してください。
値を追加する前に、arrayContainsまたはlistFindNoCaseを使用して、値が存在するかどうかを確認してください。
求めていることを実行する事前定義された関数はありませんが、これを実行する独自の関数を実装するのは簡単です。私が提供した機能は非常にシンプルで拡張が簡単です。
variables.myList = "one,two,three";
variables.myList = ListAppendDistinct(variables.myList, "three");
variables.myList = ListAppendDistinct(variables.myList, "four");
function ListAppendDistinct(list, value)
{
var _local = StructNew();
_local.list = list;
if (NOT ListContains(_local.list, value))
{
_local.list = ListAppend(_local.list,value);
}
return _local.list;
}
上記の関数を使用して、配列に明確に追加できます。これはすべて、デフォルトの区切り文字を使用していることを前提としています。データは高額になる可能性があるため、データの「サイズ」はわかりません。
variables.myArray = ArrayNew(1);
variables.myArray[1] = "one";
variables.myArray[2] = "two";
variables.myArray[3] = "three";
variables.myArray = ArrayAppendDistinct(variables.myArray, "three");
variables.myArray = ArrayAppendDistinct(variables.myArray, "four");
function ArrayAppendDistinct(array, value)
{
var _local = StructNew();
_local.list = ArrayToList(array);
_local.list = ListAppendDistinct(_local.list,value);
return ListToArray(_local.list);
}
CF10またはRailo4でUnderscore.cfcライブラリを使用できます。
_ = new Underscore();// instantiate the library
uniqueArray = _.uniq(array);// convert an array to a unique array
それ以上に簡単になるとは思いません!
(免責事項:Underscore.cfcを作成しました)
今この答えを見ている人のために:そうです。と呼ばれる関数がありますListRemoveDuplicates()
。これはColdFusion10(2017)で追加されました。
たとえば、次のコードは一意の値「AA、BB、CC」を返します
newList = listRemoveDuplicates("AA,BB,CC,AA,AA,AA,BB", ",");
writeOutput("newList = #newList#");