簡體   English   中英

如何組合兩個不同類型的列表?

[英]How to combine two list with different type?

我有兩個列表,一個是 id List<int> ids = new List<int> { 1, 2, 3,4, 5};

另一個包含數據 Person 類的列表有兩個屬性 Id 和 Name

List<Person> persons= new List<Person> { new Person { Name = "test1"},  new Person { Name = "test2"},  new Person { Name = "test3"}, new Person { Name = "test4"},  new Person { Name = "test5"}};

現在我想從 id 列表中為每個人填充 id。

有沒有辦法在 linq 中做到這一點?

有很多方法可以做到這一點..假設你的列表長度相同

for循環

for (int i = 0; i < persons.Count; i++)
   persons[i].Id = ids[i];

foreach 循環

var index = 0;
foreach (var person in persons)
   person.Id = ids[index++];

ForEach 擴展方法

var index = 0;
persons.ForEach(person => person.Id = ids[index++]);

隊列

var queue = new Queue<int>(ids);
foreach (var person in persons)
   person.Id = queue.Dequeue();

注意Linq (語言集成查詢)用於查詢而不是更新屬性,所以我根本不推薦linq方法。 但我是誰來判斷...

Enumerable.Range有副作用

Enumerable.Range(0, persons.Count).Select(i => persons[i].Id = ids[i]).ToList();
// or
var persons = Enumerable.Range(0, persons.Count).Select(i => { persons[i].Id = ids[i]; return persons[i]; }).ToList();

有副作用的拉鏈

ids.Zip(persons, (i, person) => person.Id = i).ToList();
// or
var persons = ids.Zip(persons, (i, person) => { person.Id = i; return person; }).ToList();
// or still very iffy
ids.Zip(persons, (i, person) => (i: i, person: person))
   .ToList()
   .ForEach(x => x.person.Id = x.i);

選擇有副作用

persons.Select((person, i) => person.Id = i).ToList();
// or
var persons = persons.Select((person, i) => { person.Id = i; return person; }).ToList();

在這里添加更多

Select帶索引的重載作為第二個參數並且沒有副作用;)

var personsWithId = persons
    .Select((person, id) => new Person
    {
        Id = id,
        Name = person.Name
    })
    .ToList();

如果您有預定義的 id 列表並希望將 id 應用到人員列表中具有相同索引的人員

Zip沒有副作用;)

var personIds = new[] { 1, 3, 5, 7, 9 };
var personsWithId = persons
    .Zip(personIds, (person, id) => new Person
    {
        Id = id,
        Name = person.Name
    })
    .ToList();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM