一尘不染

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

algorithm

请原谅我缺乏更好的术语。我有一个string[],我想得到一个与自己连接的乘积的乘积,以后再放入字典中。但是,我希望所有可能的组合, 除非
有一个克隆/重复键。

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

string[][]从所有可能的组合中获取a 作为每个元素:

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中对此进行了演示,那么我很乐意看到它,因为我试图进一步了解这种语法。


阅读 208

收藏
2020-07-28

共1个答案

一尘不染

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

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