我有两个List<String>包含
ListOne
A
B
C
ListTwo
A
B
C
D
Run Code Online (Sandbox Code Playgroud)
现在我需要将移动组合转换为列表字符串
所以输出列表将包含
A-B
A-C
A-D
B-C
B-D
C-D
Run Code Online (Sandbox Code Playgroud)
现在我正在使用Nested for loop它.?有没有办法使用LINQ或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));
Run Code Online (Sandbox Code Playgroud)
但它没有给出正确的输出
It produces like
A-B
A-C
A-D
B-A
B-C
B-D
C-A
C-B
C-D
Run Code Online (Sandbox Code Playgroud)
但是所需的输出就像
A-B
A-C
A-D
B-C
B-D
C-D
Run Code Online (Sandbox Code Playgroud)
示例代码使用 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]);
}
}
Run Code Online (Sandbox Code Playgroud)
它的工作正常....但我只需要一个简单的方法(使用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);
}
Run Code Online (Sandbox Code Playgroud)
保留顺序的第二个版本(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];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1179 次 |
| 最近记录: |