我有两个列表,一个是 ids 列表
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"}};
Run Code Online (Sandbox Code Playgroud)
现在我想从 id 列表中为每个人填充 id。
有没有办法在 linq 中做到这一点?
有很多方法可以做到这一点..假设你的列表长度相同
for循环
for (int i = 0; i < persons.Count; i++)
persons[i].Id = ids[i];
Run Code Online (Sandbox Code Playgroud)
foreach 循环
var index = 0;
foreach (var person in persons)
person.Id = ids[index++];
Run Code Online (Sandbox Code Playgroud)
ForEach 扩展方法
var index = 0;
persons.ForEach(person => person.Id = ids[index++]);
Run Code Online (Sandbox Code Playgroud)
队列
var queue = new Queue<int>(ids);
foreach (var person in persons)
person.Id = queue.Dequeue();
Run Code Online (Sandbox Code Playgroud)
注意 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();
Run Code Online (Sandbox Code Playgroud)
有副作用的拉链
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);
Run Code Online (Sandbox Code Playgroud)
选择 有副作用
persons.Select((person, i) => person.Id = i).ToList();
// or
var persons = persons.Select((person, i) => { person.Id = i; return person; }).ToList();
Run Code Online (Sandbox Code Playgroud)
在这里添加更多