C#中如何统计getava列表内特定房型的数量并进行对比
解决思路与代码实现
首先得明确你现有代码的问题:你现在直接拿getava的总数量和单个房型列表(比如gardenvlist)的数量对比,但getava是包含所有房型的可用日期集合,总数量肯定是多个房型的日期总和,这样的对比逻辑完全不符合你“统计仅某房型的日期数量”的需求。
接下来分两种常见的数据结构场景,给你实现方案:
场景1:getava是(日期+房型)的条目集合
假设你的getava是类似List<(DateTime Date, string RoomType)>这样的结构,每个条目代表某个日期下某房型可用。要统计仅garden房型可用的日期数量,可以按日期分组,筛选出分组里所有条目都是garden的日期,再统计这些日期的数量:
// 统计getava中仅garden可用的日期数 var onlyGardenCount = getava .GroupBy(item => item.Date) .Where(group => group.All(item => item.RoomType == "garden")) .Count(); // 同理,统计仅ocean/city的数量 var onlyOceanCount = getava .GroupBy(item => item.Date) .Where(group => group.All(item => item.RoomType == "ocean")) .Count(); var onlyCityCount = getava .GroupBy(item => item.Date) .Where(group => group.All(item => item.RoomType == "city")) .Count(); // 现在再做对比判断 if (onlyGardenCount == gardenvlist.Count()) { // garden的所有可用日期,在getava里都是仅garden可用 } else if (onlyOceanCount == oceanvlist.Count()) { // ocean的所有可用日期,在getava里都是仅ocean可用 } else if (onlyCityCount == cityvlist.Count()) { // city的所有可用日期,在getava里都是仅city可用 }
场景2:getava是日期对应可用房型集合的字典
如果你的getava是Dictionary<DateTime, HashSet<string>>结构(键是日期,值是该日期可用的所有房型集合),那统计仅某房型的日期会更直接:
// 统计仅garden可用的日期数 var onlyGardenCount = getava .Where(kv => kv.Value.SetEquals(new HashSet<string> { "garden" })) .Count(); // 仅ocean/city的统计逻辑同理 var onlyOceanCount = getava .Where(kv => kv.Value.SetEquals(new HashSet<string> { "ocean" })) .Count(); var onlyCityCount = getava .Where(kv => kv.Value.SetEquals(new HashSet<string> { "city" })) .Count(); // 后续对比逻辑和上面一致
额外说明
如果你其实是想统计getava中属于garden房型的条目总数(不管该日期是否有其他房型),那逻辑更简单:
var gardenInGetavaCount = getava.Count(item => item.RoomType == "garden");
但根据你的问题描述,应该是需要前者(仅该房型可用的日期数),所以优先用前面的分组/字典筛选方案。
内容的提问来源于stack exchange,提问作者supsupdb
相关产品推荐
相关产品推荐

