C#: 如何将两个列表合并为一个二元组列表?

4

我有两个列表。第一个是类型为string的列表。第二个是类型为object的列表。现在我想将这两个列表都放进一个Tuple<string,object>中。

var List = new(string list1, object list2)[]

我该怎么做?

我不得不创建两个分离的列表,因为我正在序列化对象,如果我一开始就有一个List<Tuple<string,object>>, 那么序列化就行不通了。两个列表都可能很大,所以也许可以使用foreach循环来处理?


1
(string list1, object list2) 是一个 ValueTuple 结构体,而不是 Tuple 类。如果你想使用值元组(由于元组组件被正确命名,我建议这样做),只需将答案中的 new Tuple<string, object>(x, y)Tuple.Create(a, b) 替换为 (x, y)(a, b) - ckuri
你能给我展示一个例子吗? - Max Rowe
如果你采用 Markus 的回答,只需将最后一行替换为 List<(string yourFieldNameHere1, object yourFieldNameHere)> result = lst.Zip(obj, (x, y) => (x, y)).ToList(); - ckuri
2个回答

11
你可以使用Zip方法创建这两个列表的一个列表:
var lst = new List<string>() { "a", "b" };
var obj = new List<object>() { 1, 2 };
var result = lst.Zip(obj, (x, y) => new Tuple<string, object>(x, y))
                .ToList();

这将合并两个列表。这是OP期望的行为吗?不确定他的问题表述。 - TanvirArjel
@TanvirArjel,从标题“如何将两个列表合并为一个...”来看,我怀疑问题中的伪代码有点误导性。 - Markus
是的!你理解得没错!他也可以尝试将两个列表作为元组传递,例如(list1,list2)。但使用Zip函数可以并行循环遍历项目,而不是串行。 - TanvirArjel

5
您可以使用Linq的Zip方法:Zip
List<string> list1 = GetStrings();
List<object> list2 = GetObjects();

var merged = list1.Zip(list2, (a, b) => Tuple.Create(a, b));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接