0

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

Set#1(街道前方向) { N, S } Set#2(街道名称) {Frankford, Baily} Set#3(街道类型) {Ave, St} Set#4(街道后方向) {S}

让我列出几个预期的组合:
N Baily Ave S
S Frankford St S
S Baily Av S

.
.

现在你可以看到每个集合的元素都在它的位置
Pre Direction is in Place 1
Street Name is in Place 2
Streety Type is in Place 3
Street Description is in Place 4

我正在寻找执行此任务的最有效方法,一种方法是一次处理 2 组,例如: 组合
第 1 组和第 2 组 --> 创建一个新的第 5 组结果组合
第 5 组和第 3 组的组合 --> 创建一个新的第 6 组结果组合
组合第 6 组和第 4 组 --> 这将为我提供最终组合

有没有最好的方法来做这件事?请帮忙。我会更喜欢 C# 或 Java。

谢谢

4

3 回答 3

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};
于 2009-05-29T03:25:05.100 回答
1

听起来您正在寻找某些集合的笛卡尔积。您可以使用嵌套的 for 循环来做到这一点。这是您没有要求的 Haskell 代码。

Prelude> [[x,y] | x <- ['1'..'3'], y <- ['A'..'C']]
["1A","1B","1C","2A","2B","2C","3A","3B","3C"]
于 2009-05-29T03:09:00.670 回答
0

@David B 如果 predirections 列表为空怎么办,有没有办法让我们仍然获得组合,因为通过你的方式不会返回任何笛卡尔积。


大卫 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};
于 2009-05-29T18:18:50.880 回答