根据另一个列表从列表中获取元素

本文关键字:列表 获取 元素 另一个 | 更新日期: 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!");
  }

希望对您有所帮助。