【问题标题】:Merge Two or more list according to order按顺序合并两个或多个列表
【发布时间】:2014-02-23 03:58:18
【问题描述】:

我有两个列表

List<string> Name = new List<string>();
List<string> Address = new List<string>();

两个列表都有 30 个数据。我想合并两个列表以获得完整的信息列表,例如

List<string, string> CompleteInformation = new List<string, string>();

另外,如果我想将两个以上的列表合并为一个,该怎么做。

【问题讨论】:

  • 你的意思是字典 吗?

标签: c#


【解决方案1】:

您正在寻找Zip 方法:

var CompleteInformation = Name.Zip(Address, (n, a) => new { Address = a, Name = n }).ToList();

为您提供匿名类型实例的列表,具有两个属性:Address i Name

更新

您可以多次致电Zip

var CompleteInformation
    = Name.Zip(Address, (n, a) => new { Address = a, Name = n })
          .Zip(AnotherList, (x, s) => new { x.Address, x.Name, Another = s })
          .ToList();

【讨论】:

  • 哦,这太不可思议了!无需创建单独的容器。我将一直使用它。
  • 谢谢你 MarcinJuraszek。但是,如果我有两个以上的列表,那么我该怎么办。例如,假设我还有两个名为 List City = new List(); 的列表。列表 状态 = 新列表();我想将这些组合在同一个完整信息列表中
  • @MarcinJuraszek:非常非常感谢 Marcin。这就是我想要的。你这个伟人。再次感谢您。
  • @MarcinJuraszek :我想在循环中使用此代码,并且我想在循环外实例化此 CompleteInformation 以便我可以从方法中返回它。我正在尝试这个: List CompleteInformation = new List();但它不起作用。
  • @Pranab 匿名类型不适合作为方法结果传递。您必须创建自己想要从方法返回的类型并构造该类型实例作为Zip 调用的结果。
【解决方案2】:

您可以使用Tuple 来存储信息,并使用Zip 方法从两个列表中获取信息,就像这样

List<Tuple<string, string>> bothLists = Name.Zip(Address, (n, a) => new Tuple<string, string>(n, a)).ToList();

但我认为最好的方法是创建一个与您的域相关的类:

public class Person
{
    public string Name { get; set; }
    public string Address { get; set; }
}

然后

List<Person> bothLists = Name.Zip(Address, (n, a) => new Person{Address = a, Name = n}).ToList();

但是,如果您有多个列表,则需要嵌套多个 Zip,这并不美观。如果您确定所有列表都具有相同数量的元素,只需遍历它们即可。

在 LINQ 中:

List<Person> multipleLists = Name.Select((t, i) => new Person
    {
        Name = t, Address = Address[i], ZipCode = ZipCode[i]
    }).ToList();

没有 LINQ(说真的,for 循环没有任何问题)

List<Person> multipleLists = new List<Person>();
for (int i = 0; i < Name.Count; i++)
{
    multipleLists.Add(new Person
        {
            Name = Name[i],
            Address = Address[i],
            ZipCode = ZipCode[i]
        });
}

如果您不想上课,也可以使用Tuple&lt;string, string, string, [...]&gt;

【讨论】:

  • 我很抱歉这个喋喋不休的评论,但我不得不说——你的名字真棒。
【解决方案3】:

还有一个类似这样的字典方法:

var people = Name.Zip(Address, (n, a) => new { n, a })
             .ToDictionary(x => x.n, x => x.a);

然后您可以访问键和值。易于搜索信息。

【讨论】:

    猜你喜欢
    • 2016-09-15
    • 1970-01-01
    • 2017-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-16
    • 2014-12-11
    • 1970-01-01
    相关资源
    最近更新 更多