C# 将两个列表合并为一个列表,如 Enumerable.ConvertAll
C# merge two lists into one list like Enumerable.ConvertAll
我想将具有相同索引的两个列表转换为一个列表。
鉴于此:
List<double> ListA = new List<double> { 1, 2, 3, 4, 5 };
List<string> ListB = new List<string> { "A","B","C","D","E" };
到现在为止,我用过这个:
List<string> UNHAPPY = new List<string>();
for (int ListIndex = 0; ListIndex < ListA.Count; ListIndex++)
{
UNHAPPY.Add(ListB[ListIndex]+ListA[ListIndex].ToString());
}
// such that UNHAPPY == new List<string> {"A1", "B2", "C3", "D4", "E5"}
但我真的想尽可能使用短代码,像这样(类似于Enumerable.ConvertAll):
List<string> HAPPY = SOME_CONTAINER(ListA, ListB).SOME_SELECTOR((a,b) => b + a.ToString());
// such that HAPPY == new List<string> {"A1", "B2", "C3", "D4", "E5"}
有什么快速的方法吗?提前谢谢你!
您正在寻找Enumerable.Zip
first.Zip(second, (f, s) => f + s.ToString());
LINQ 有一个方法,叫做 Zip
:
var res = ListA.Zip(ListB, (a,b) => $"{b}{a}");
它需要两个序列和一个 Func
委托,并将委托应用于来自两个序列的项目对。
注意: 在 a
上调用 ToString
是多余的,C# 会将字符串连接到任何内容,包括 int
,通过在相应的对象上调用 ToString
。我更喜欢字符串插值,尤其是当你需要连接两个以上的项目时。
您可以使用 Zip
:
ListA.Zip(ListB, (a,b) => b + a.ToString());
这会产生:
csharp> List<double> ListA = new List<double> { 1, 2, 3, 4, 5 };
csharp> List<string> ListB = new List<string> { "A","B","C","D","E" };
csharp> ListA.Zip(ListB, (a,b) => b + a.ToString());
{ "A1", "B2", "C3", "D4", "E5" }
Zip
同时迭代两个可迭代对象并生成函数构造的乘积。从其中一个迭代器耗尽的那一刻起,Zip
停止。
我想将具有相同索引的两个列表转换为一个列表。 鉴于此:
List<double> ListA = new List<double> { 1, 2, 3, 4, 5 };
List<string> ListB = new List<string> { "A","B","C","D","E" };
到现在为止,我用过这个:
List<string> UNHAPPY = new List<string>();
for (int ListIndex = 0; ListIndex < ListA.Count; ListIndex++)
{
UNHAPPY.Add(ListB[ListIndex]+ListA[ListIndex].ToString());
}
// such that UNHAPPY == new List<string> {"A1", "B2", "C3", "D4", "E5"}
但我真的想尽可能使用短代码,像这样(类似于Enumerable.ConvertAll):
List<string> HAPPY = SOME_CONTAINER(ListA, ListB).SOME_SELECTOR((a,b) => b + a.ToString());
// such that HAPPY == new List<string> {"A1", "B2", "C3", "D4", "E5"}
有什么快速的方法吗?提前谢谢你!
您正在寻找Enumerable.Zip
first.Zip(second, (f, s) => f + s.ToString());
LINQ 有一个方法,叫做 Zip
:
var res = ListA.Zip(ListB, (a,b) => $"{b}{a}");
它需要两个序列和一个 Func
委托,并将委托应用于来自两个序列的项目对。
注意: 在 a
上调用 ToString
是多余的,C# 会将字符串连接到任何内容,包括 int
,通过在相应的对象上调用 ToString
。我更喜欢字符串插值,尤其是当你需要连接两个以上的项目时。
您可以使用 Zip
:
ListA.Zip(ListB, (a,b) => b + a.ToString());
这会产生:
csharp> List<double> ListA = new List<double> { 1, 2, 3, 4, 5 };
csharp> List<string> ListB = new List<string> { "A","B","C","D","E" };
csharp> ListA.Zip(ListB, (a,b) => b + a.ToString());
{ "A1", "B2", "C3", "D4", "E5" }
Zip
同时迭代两个可迭代对象并生成函数构造的乘积。从其中一个迭代器耗尽的那一刻起,Zip
停止。