有没有办法在不使用循环的情况下将结构转换为数组?

时间:2011-05-26 04:23:18

标签: arrays coldfusion struct

我很好奇,是否有另一种方法可以在Coldfusion中将结构转换为数组而不会在其上进行循环?我知道如果我们使用for in循环可以这样做:

local.array = [];
for (local.value in local.struct)
{
   arrayAppend(local.array, local.value);
}

3 个答案:

答案 0 :(得分:5)

StructKeyArray是否符合您的要求?

  

描述

     

在ColdFusion中查找键   结构

答案 1 :(得分:2)

如果您尝试维护结构中的顺序,则可以始终使用Java LinkedHashMap,如下所示:

cfmlLinkedMap = createObject("Java", "java.util.LinkedHashMap").init();

cfmlLinkedMap["a"] = "Apple";
cfmlLinkedMap["b"] = "Banana";
cfmlLinkedMap["c"] = "Carrot";

for(key in cfmlLinkedMap){
    writedump(cfmlLinkedMap[key]);  
}

你也可以用更“java”的方式做同样的事情,不知道你为什么要这样做,但它始终是一个选择:

//no need to init
linkedMap = createObject("Java", "java.util.LinkedHashMap");

//java way
linkedMap.put("d","Dragonfruit");
linkedMap.put("e","Eggplant");
linkedMap.put("f","Fig");

//loop through values
iterator = linkedMap.entrySet().iterator();        

while(iterator.hasNext()){
    writedump(iterator.next().value);   
}

//or

//loop through keys
iterator = linkedMap.keySet().iterator();

while(iterator.hasNext()){
    writedump(linkedMap.get(iterator.next()));  
}

请记住,密钥是SeNsItIvE!

答案 2 :(得分:1)

在Coldfusion 10或Railo 4中,如果你想要一组数值(而不是键),你可以使用Underscore.cfc library,如下所示:

_ = new Underscore();// instantiate the library

valueArray = _.toArray({first: 'one', second: 'two'});// returns: ['one','two']

注意:Coldfusion结构是无序的,因此不保证您对结果数组中的值有任何特定的顺序。

(免责声明:我写过Underscore.cfc)