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

时间:2014-05-21 13:47:18

标签: c# list object search

您好我不完整地发布了我的问题HERE。我再次在这里完全发布它。很抱歉给您带来不便。

我有一个这样的课。

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

我有一个清单就像这样。

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

我想搜索少于5名成员的家庭成员,并且我想将没有家庭成员的成员分配给少于5名成员的房屋。我已经定义了没有房屋作为NA的成员家庭。

我想检查一下这个名单是否已经没有拥有少于5名成员的房屋。如果是条件。

2 个答案:

答案 0 :(得分:0)

是什么

  

我想搜索少于5名成员的家庭成员

如果你想搜索ppl列表,可以使用linq轻松完成,

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

答案 1 :(得分:0)

linq是你的朋友......

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

将找到所有少于五名成员的房屋,

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

会找到所有拥有'NA'

家庭成员的人

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

     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;
        }
     }
然而,这第二种方式可能会留下那些仍然没有房子的人,因为所有其他房屋已经有五个成员。

相关问题