我有两个List<String>
其中包含
ListOne
A
B
C
ListTwo
A
B
C
D
现在我需要将移动组合获取到列表字符串
所以输出列表将包含
A-B
A-C
A-D
B-C
B-D
C-D
现在我正在使用Nested for loop
为了这。?
有什么方法可以使用LINQ
or LAMBDA EXPRESSION
请帮助我做到这一点。
提前致谢
示例代码
List<String> ListOne = new List<string> { "A","B","C"};
List<String> ListTwo = new List<string> { "A", "B", "C", "D" };
List<String> Result = new List<string>(from X in ListOne
from Y in ListTwo
where X!=Y
select string.Format("{0}-{1}", X, Y));
但它没有给出正确的输出
It produces like
A-B
A-C
A-D
B-A
B-C
B-D
C-A
C-B
C-D
但所需的输出就像
A-B
A-C
A-D
B-C
B-D
C-D
示例代码使用For Loop
List<String> ResultTwo = new List<string>();
for (int i = 0; i < ListOne.Count; i++)
{
for (int j = 0; j < ListTwo.Count; j++)
{
if(ListOne[i] != ListTwo[j])
if (ResultTwo.Contains(ListOne[i] + "-" + ListTwo[j]) == false && ResultTwo.Contains(ListTwo[j] + "-" + ListOne[i]) == false)
ResultTwo.Add(ListOne[i] + "-" + ListTwo[j]);
}
}
它工作正常......但我只需要一个简单的方法(使用LINQ
)
进行编辑后,这应该可以解决问题:
List<string> ListOne = new List<string>(){"A","B","C"};
List<string> ListTwo = new List<string>(){ "A","B","C","D"};
var result = from a in ListOne
from b in ListTwo
let condition = a.CompareTo(b)
where condition != 0
select condition < 0 ? a + "-" + b : b + "-" + a;
foreach (var v in result.Distinct())
{
Console.WriteLine(v);
}
保留顺序的第二个版本(ItemFromList1 - ItemFromList2):
var result =
from o in
(
from a in ListOne
from b in ListTwo
let condition = a.CompareTo(b)
where condition != 0
select new { a, b, condition }
)
group o by
o.condition < 0 ? o.a + "-" + o.b : o.b + "-" + o.a into g
select g.Select(n => n.a + "-" + n.b).Take(1).ToArray()[0];
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)