m_e*_*sta 2 arrays coldfusion list
这是ColdFusion中的一个似乎应该如此简单的事情......但我找不到简单的道路.
我有一系列的清单.该数组可以是任何大小,每个列表的长度可以是任何大小.(这可以被操纵成一个多维数组,无论......重点是,我有一个列表列表)
例如
129128127
130131132
135133134
137138136
140139
141,142
或者简短的版本......它可以变化
13,14,15
11,12
我需要的是一个数组,查询或一些其他数据结构,包含所有可能的唯一组合,从每个列表中按顺序取一个...所以对于短版本,将有6个独特的组合.对于第一个较长的例子,我们将有3*3*3*3*2*2 = 324个独特的组合.
计算它们很容易......但是以结构化格式获得实际组合的最佳方法是什么?一定要错过一些简单的事情......我已经好几个小时了!: - /
这是我的看法.感谢您在codingforums.com上的这篇文章中的php函数:http://www.codingforums.com/showpost.php? p = 945289&posttcount = 3 我刚想到如何在cfml中重写它.
<cfscript>
public array function array_cartesian_product(_arrays=[]) {
var result = [];
var _arrayslen = arraylen(arguments._arrays);
var _size = (_arrayslen) ? 1 : 0;
var _array = '';
var x = 0;
var i = 0;
var j = 0;
var _current = [];
for (x=1; x lte _arrayslen; x++) {
_size = _size * arraylen(arguments._arrays[x]);
_current[x] = 1;
}
for (i=1; i lte _size; i++) {
result[i] = [];
for (j=1; j lte _arrayslen; j++) {
arrayappend(result[i], arguments._arrays[j][_current[j]]);
}
for (j=_arrayslen; j gt 0; j--) {
if (arraylen(arguments._arrays[j]) gt _current[j]) {
_current[j]++;
break;
}
else {
_current[j] = 1;
}
}
}
return result;
}
</cfscript>
<cfset arrays = [[129,128,127],[130,131,132],[135,133,134],[137,138,136],[140,139],[141,142]]>
<cfset r = array_cartesian_product(arrays)>
<cfoutput>#arraylen(r)#</cfoutput>
<cfdump var="#r#">
Run Code Online (Sandbox Code Playgroud)