直接在 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();
请原谅我缺乏更好的术语。我有一个 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();