字符串[]的笛卡儿乘积本身没有重复/克隆直接在C#中

时间:2017-12-13 03:00:54

标签: c# arrays algorithm shortcut cartesian-product

请原谅我缺乏更好的术语。我有一个string[],我希望得到一个catesian join的产品,以便以后输入字典。但是,当存在克隆/重复键时,我喜欢除之外的所有可能组合

string[] array1 = { "aa", "bb", "cc" };
string[][] arrayOfArrays = array1.SelectMany(left => array1, (left, right) => new string[] { left, right }).ToArray();

将从所有可能的组合中获得string[][],并产生每个元素:

aa aa
aa bb
aa cc
bb aa
bb bb
bb cc
cc aa
cc bb
cc cc

我在这里试图理解的是,如果您得到这样的结果,那么加入的是什么:

aa bb
aa cc
bb aa
bb cc
cc aa
cc bb

这样,当我创建字典时,我不必进入for循环并将这些键取出给值对。如果你用1-liner或lambda演示了这一点,我很乐意看到它,因为我试图更多地了解这种语法。

1 个答案:

答案 0 :(得分:6)

我不确定它是否有名称,但您可以使用Where子句过滤掉那些匹配的值。

string[][] arrayOfArrays =
    array1.SelectMany(left => array1, (left, right) => new string[] { left, right })
          .Where(x => x[0] != x[1])
          .ToArray();