请原谅我缺乏更好的术语。我有一个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演示了这一点,我很乐意看到它,因为我试图更多地了解这种语法。
答案 0 :(得分:6)
我不确定它是否有名称,但您可以使用Where
子句过滤掉那些匹配的值。
string[][] arrayOfArrays =
array1.SelectMany(left => array1, (left, right) => new string[] { left, right })
.Where(x => x[0] != x[1])
.ToArray();