我正在寻找一种方法,我可以生成4组元素的不同组合,使得每个组元素在最终组合中具有固定的位置: 为了更好地解释我的要求,让我给出这4组的样本,最后我要找的是:
设置#1(街道预先方向){N,S} 设置#2(街道名称){Frankford,Baily} 第3集(街道类型){Ave,St} 设置#4(街道邮政方向){S}
让我列出几个期待的组合:
N Baily Ave S
S Frankford St S
S Baily Av S
。
。
现在您可以看到每个集合的元素都落入其位置 Pre Direction就位1 街道名称就位2 Streety Type就位3 街道描述在第4位
我正在寻找执行此任务的最有效方法,一种方法是一次工作2套,如: 组合第1组和第2组 - >创建一组新的结果组合 组合第5组和第3组 - >创建一组新的结果组合 组合Set 6和Set 4 - >这将给我最终组合
有没有最好的方法来做这件事?请帮助。我更喜欢C#或Java。
由于
答案 0 :(得分:2)
这里有一些linq(c#)为你提供所有组合,它不是“最有效的方式”。
var query =
from d in predirections
from n in names
from t in types
from s in postdirections
select new {d, n, t, s};
答案 1 :(得分:1)
听起来你正在寻找一些套装的笛卡尔积。您可以使用嵌套for循环来完成它。这是Haskell代码,你没有要求。
Prelude> [[x,y] | x <- ['1'..'3'], y <- ['A'..'C']]
["1A","1B","1C","2A","2B","2C","3A","3B","3C"]
答案 2 :(得分:0)
@ David B 如果预先排序列表为空,有什么方法我们仍然可以获得组合,因为通过您的方式将不会返回任何笛卡儿产品。
David B在这里:
var query =
from d in predirections.DefaultIfEmpty()
from n in names.DefaultIfEmpty()
from t in types.DefaultIfEmpty()
from s in postdirections.DefaultIfEmpty()
select new {d, n, t, s};