9 Stimmen

Coldfusion eindeutige Liste

Ich habe mich gefragt, ob es eine einfache Möglichkeit gibt, unterschiedliche Werte in einer Coldfusion-Liste oder einem Array zu erzwingen.

Danke

11voto

Henry Punkte 32409
<cfset temp = structNew()>
<cfloop list="a,b,c,a,c" index="i">
  <cfset temp[i] = "">
</cfloop>
<cfset distinctList = structKeyList(temp)>

Das ist die einfachste Lösung, die ich mir vorstellen kann. Der Nachteil ist, dass die Reihenfolge nicht beibehalten wird und die Groß- und Kleinschreibung der Listenelemente nicht beachtet wird. Wenn Sie die Groß-/Kleinschreibung nicht beachten müssen, verwenden Sie Javas hashset.

7voto

Sam Farmer Punkte 4098

Bevor Sie einen Wert hinzufügen, prüfen Sie, ob er existiert, indem Sie arrayContains oder listFindNoCase verwenden.

4voto

Stefano D Punkte 958

Es gibt keine vordefinierten Funktionen, die das tun, wonach Sie fragen, aber es ist einfach, Ihre eigenen Funktionen zu implementieren, die dies tun würden. Die von mir bereitgestellten Funktionen sind sehr einfach und leicht zu erweitern.

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;
}

Sie können die obige Funktion verwenden, um eindeutig an das Array anzuhängen, wobei davon ausgegangen wird, dass Sie Standardbegrenzungszeichen verwenden. Ich bin mir nicht sicher über die "Größe" Ihrer Daten, weil es teuer werden kann.

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);
}

4voto

Russ Punkte 1871

Sie können die Underscore.cfc-Bibliothek in CF 10 oder Railo 4:

_ = new Underscore();// instantiate the library    
uniqueArray = _.uniq(array);// convert an array to a unique array

Ich glaube nicht, dass es noch einfacher ist als das!

(Haftungsausschluss: Ich habe Underscore.cfc geschrieben)

2voto

shaedrich Punkte 4845

Für diejenigen, die sich diese Antwort jetzt ansehen: Sie ist es. Es gibt eine Funktion namens ListRemoveDuplicates() . Sie wurde in ColdFusion 10 (2017) hinzugefügt.

Der folgende Code gibt zum Beispiel die eindeutigen Werte "AA,BB,CC" zurück

newList = listRemoveDuplicates("AA,BB,CC,AA,AA,AA,BB", ",");
writeOutput("newList = #newList#");

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X