在对象列表中搜索匹配项并赋值
本文关键字:赋值 搜索 对象 列表 | 更新日期: 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;
}
}
然而,第二种方法可能会留下仍然没有房子的人,因为所有其他房子已经有五个人了。