You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:09:53