根据另一个列表从列表中获取元素
本文关键字:列表 获取 元素 另一个 | 更新日期: 2023-09-27 18:30:36
我有两个类,比如:
public class Person
{
public long Id { get; set; }
public string Name { get; set; }
}
public class Vampire
{
public long Id { get; set; }
}
然后,我有两个名单,一个是人名单,一个是吸血鬼名单。所有的吸血鬼都是人。
我需要的是两个孩子名单,感染者和未感染者。我正在使用for构建两个列表,但我知道可以使用linq或其他东西。
有什么帮助吗?
像这样:
var vampireIds = new HashSet<long>(vampireList.Select(x => x.Id));
var infectedPersons = personList.Where(x => vampireIds.Contains(x.Id));
var regularPersons = personList.Where(x => !vampireIds.Contains(x.Id));
我会选择如下内容:
void Main()
{
var list = new List<Person>(){ new Person(){ Id = 1 }, new Vampire(){ Id = 2 } };
var infected = list.Where (x => x is Vampire);
var notInfected = list.Except(infected);
}
public class Person
{
public long Id { get; set; }
public string Name { get; set; }
}
public class Vampire : Person
{
}
如果只有一个人可以成为吸血鬼,你可以从人那里继承吸血鬼,然后遍历所有人,看看他们是否是吸血鬼;如果是 ->添加到吸血鬼列表中,否则添加到非吸血鬼列表中。
试试这个:
var people = new List<Person>
{
new Person {Id = 1, Name = "John"},
new Person {Name = "Dave", Id = 2},
new Person {Id = 3, Name = "Sarah"}
};
var vamps = new List<Vampire> {new Vampire {Id = 1}};
var theInfected = people.Where(p => vamps.Select(v => v.Id).Contains(p.Id));
var theAfraid = people.Except(theInfected);
foreach (var person in theInfected)
{
System.Console.WriteLine(person.Name + " Is Infected!");
}
foreach (var person in theAfraid)
{
System.Console.WriteLine(person.Name + " Is Afraid!");
}
希望对您有所帮助。