直接在 C# 中不带 duplicate/clone 的 string[] 与自身的笛卡尔积

Cartesian product of string[] with itself without duplicate/clone directly in C#

请原谅我缺乏更好的术语。我有一个 string[],我想获得一个 catesian join 的乘积,以便稍后放入字典中。但是,当有 clone/duplicate 键时,我想要所有可能的组合 除了

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 中对此进行了演示,我很乐意看到它,因为我正试图了解更多关于这种语法的信息。

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

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