在对象列表中搜索匹配项并赋值

本文关键字:赋值 搜索 对象 列表 | 更新日期: 2023-09-27 18:04:21

你好,我把我的问题不完整地贴在这里。我把它完全重新贴在这里。很抱歉给您带来不便。

我有一节这样的课。

class man    
{
 public string name { get; set; }
 public string houseid { get; set; }
}

我这里有一个像这样的列表。

List<man> ppl = new List<man>();

我想搜索成员数少于5的houseid s,我想把没有houseid的成员分配给成员数少于5的house。我把没有房子的成员定义为NA..

我想检查列表中是否已经没有少于5个成员的房子。

在对象列表中搜索匹配项并赋值

我要搜索成员数小于5的houseid

如果你想搜索PPL列表,你可以很容易地使用linq,

 var pplWithNoHouseId=   from man in ppl
    where man.houseid =="NA"
    select man;

linq是你的朋友…

     var housesWithLessThanFiveMembers =
        from p in ppl
        where p.houseid != "NA"
        group p by p.houseid into household
        where household.Count() < 5
        select household;

将查找成员少于5人的所有议院,并且

     var peopleWithNoHouseID = 
        from p in ppl
        where p.houseid == "NA"
        select p;

将查找所有房号为'NA'的人

如果你不在乎添加成员到一个房子可能会导致它的成员数超过5,那么解决方案很简单:

     var firstHouse = housesWithLessThanFiveMembers.First();
     foreach (man m in peopleWithNoHouseID)
     {
        m.houseid = firstHouse.Key;
     }

但是如果你真的在乎,那么…

     foreach (var house in housesWithLessThanFiveMembers)
     {
        int memberCount = house.Count();
        while (memberCount < 5)
        {
           man m = peopleWithNoHouseID.FirstOrDefault();
           if (m == null)
              return;
           m.houseid = house.Key;
           memberCount += 1;
        }
     }

然而,第二种方法可能会留下仍然没有房子的人,因为所有其他房子已经有五个人了。