亲爱的,这就像我之前的问题How to get moving combination from two List<String> in C#?
我有一个主列表和两个子列表,如下所示
List<String> MasterList = new List<string> { "A", "B", "C", "D", "E" };
List<String> ListOne = new List<string> { "A", "B", "C" };
List<String> ListTwo = new List<String> { "B", "D" };
我只需要从上面的列表中获取正在使用的运行组合(上一个问题的答案(谢谢Danny Chen))
List<String> Result = new List<string>();
Result = ListOne.SelectMany((a, indexA) => ListTwo
.Where((b, indexB) => ListTwo
.Contains(a) ? !b.Equals(a) && indexB > indexA :
!b.Equals(a)).Select(b => string.Format("{0}-{1}", a, b))).ToList();
所以结果列表将包含
"A-B"
"A-D"
"B-D"
"C-B"
"C-D"
现在我的问题是排序问题
在上面的结果中,第四个条目是C-B
但它应该是B-C
。因为MasterList
C
位于B
之后。
如何在我现有的linq
中执行此操作。
请帮我这样做。
答案 0 :(得分:1)
这里的确切要求并不是很清楚,MasterList也决定首先出现哪两项? X1-X2列表的顺序怎么样?即B-C应该出现在B-D之前,因为C出现在MasterList中的D之前?
无论如何,这是产生你到目前为止所要求的结果的东西:
List<String> MasterList = new List<string> { "A", "B", "C", "D", "E" };
List<String> ListOne = new List<string> { "A", "B", "C" };
List<String> ListTwo = new List<String> { "B", "D" };
ListOne.SelectMany(i =>
ListTwo.Where(i2 => i != i2)
.Select(i2 =>
{
if (MasterList.IndexOf(i) < MasterList.IndexOf(i2))
return string.Format("{0}-{1}", i, i2);
else
return string.Format("{0}-{1}", i2, i);
}
));
输出:
A-B
A-D
B-D
B-C
C-D