【问题标题】:C#: How do i get 2 lists into one 2-tuple list inC#:如何将 2 个列表放入一个 2 元组列表中
【发布时间】:2019-02-14 12:26:50
【问题描述】:

我有 2 个列表。第一个是类型string。第二个是类型object。现在我想将两个列表都放入Tuple<string,object>。 像这样

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

我该怎么做?

我必须创建 2 个单独的列表,因为我正在序列化对象,如果我首先有 List<Tuple<string,object>>,则序列化将不起作用。 两个列表都可以变大,所以也许使用 foreach 循环?

【问题讨论】:

  • (string list1, object list2) 是一个 ValueTuple 结构,而不是一个 Tuple 类。如果您想要值元组(由于元组组件被正确命名,我建议您这样做)只需将答案中的new Tuple<string, object>(x, y)Tuple.Create(a, b) 分别替换为(x, y)(a, b)
  • 你能给我举个例子吗?
  • 如果您接受 Markus 的回答,只需将最后一行替换为 List<(string yourFieldNameHere1, object yourFieldNameHere)> result = lst.Zip(obj, (x, y) => (x, y)).ToList();

标签: c# list tuples


【解决方案1】:

您可以使用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 来自标题:“我如何将两个列表合二为一……”;我怀疑问题中的伪代码有点误导。
  • 是的!你的理解是正确的!也可能是他正在尝试将两个列表作为元组传递,例如(list1,list2)。但是使用 Zip 对项目进行并行循环,而不是串行循环。
【解决方案2】:

您可以使用 Linq Zip 方法:

List<string> list1 = GetStrings();
List<object> list2 = GetObjects();

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-11
    • 1970-01-01
    • 1970-01-01
    • 2013-03-25
    • 1970-01-01
    • 2021-08-16
    • 1970-01-01
    相关资源
    最近更新 更多