我正在寻找一种可以以一种方式生成不同组合元素的不同组合的方式,以使每个集合的元素在最终组合中具有固定位置:为了更好地解释我的要求,让我给出那4套的样本,最后我的内容正在寻找:

集#1(街道pre Direction){n,s} set#2(街道名称){Frankford,baily} set#3(街道类型){ave,st} set#4(街道帖子方向){s}

让我列出很少有人期待组合的组合:
n baily ave s
S弗兰克福德圣
S baily av s
.
.
.

现在,如您所见,每个集合的元素都落入了它的位置
前方向有1
街头名称到位2
街头类型已经到位3
街道描述已到位4

我正在寻找执行这项任务的最有效方法,一种做到这一点的方法是一次在2套中工作:
组合第1集,并设置2->创建一个新的组合组合组合
组合第5集并集3->创建新的组合6的组合组合
组合第6组和第4组 - >这将为我提供最终组合

有什么最好的方法可以做这件事吗?请帮助。我更喜欢C#或Java。

谢谢

有帮助吗?

解决方案 3

@ David B,如果预定列表为空,是否有一种方法可以使我们获得组合,因为通过您的方式将返回无笛卡尔产品。


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

其他提示

这是一些为您提供所有组合的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};

听起来您正在寻找某些套装的笛卡尔产品。您可以使用嵌套进行循环进行操作。这是Haskell代码,您没有要求。

Prelude> [[x,y] | x <- ['1'..'3'], y <- ['A'..'C']]
["1A","1B","1C","2A","2B","2C","3A","3B","3C"]
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top