【问题标题】:Search for matching items in an object list and assign values在对象列表中搜索匹配项并分配值
【发布时间】:2014-07-10 05:03:06
【问题描述】:

您好,我没有完整地发布我的问题HERE。我再次将其完全发布在这里。给您带来的不便,我们深表歉意。

我有一堂这样的课。

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

我在这里有一个列表,就像这样。

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

我想搜索成员少于 5 个的 houseid,并且我想将没有 houseid 的成员分配给成员少于 5 个的房屋。我已将没有房屋的成员的 houseid 定义为 NA..

我想检查列表中是否已经没有成员少于 5 人的房屋。带有 if 条件。

【问题讨论】:

  • 你需要一个非常复杂的 for 语句和 if 语句的组合,我认为你很可能最好对你的架构使用不同的方法。我建议使用包含实际 House 对象列表的 Abstract House 类。每个单独的 House 对象可以保持居住者、每个单独成员及其各自 ID 的运行总数。使用我提到的架构,应用循环来检查您的条件将是小菜一碟!

标签: c# list object search


【解决方案1】:

做什么

我想搜索少于 5 个成员的 houseid

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

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

【讨论】:

    【解决方案2】:

    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”的 houseid 的人

    如果您不在乎将成员添加到房屋可能会导致其成员数超过 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;
            }
         }
    

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

    【讨论】:

    • 如何将没有房屋的人分配到有 5 名成员的房屋?
    • 这是您唯一的要求吗?还是一所房子的成员不得超过 5 人?
    • 不,没有超过 5 个成员的房屋。
    猜你喜欢
    • 2014-07-11
    • 2014-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-06
    • 1970-01-01
    相关资源
    最近更新 更多