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

如何通过字符串获取枚举项索引并实现星期推算功能

解决方案

首先先提醒你定义的枚举命名存在问题:枚举名Month意为月份,但成员是星期枚举值,建议修改为WeekDay避免后续业务逻辑混淆。

1. 字符串转枚举索引的简便实现

根据你使用的技术栈不同,有两种常用的简便实现方案:

方案1:C#/.NET 环境(内置枚举解析支持)

.NET 框架自带枚举解析方法,不需要手动写映射逻辑,直接调用内置API即可:

// 修正后的枚举定义
enum WeekDay
{
    Mon,
    Tue,
    Wed,
    Thu,
    Fri,
    Sat,
    Sun
}

// 字符串转枚举获取索引示例
string inputDay = "Mon";
if (Enum.TryParse<WeekDay>(inputDay, out WeekDay dayEnum))
{
    int index = (int)dayEnum; // 此处index值即为0,符合需求
}

如果需要频繁调用字符串转枚举的逻辑,可以预先构建映射字典提升性能:

// 全局只需要初始化一次
Dictionary<string, int> DayStrToIndex = Enum.GetNames<WeekDay>()
    .ToDictionary(name => name, name => (int)Enum.Parse<WeekDay>(name));

// 后续调用直接查字典,时间复杂度O(1)
int index = DayStrToIndex["Mon"];

方案2:C++ 等无内置枚举解析的环境

直接预构建哈希映射表即可,实现简单性能也足够:

#include <unordered_map>
#include <string>

enum WeekDay
{
    Mon,
    Tue,
    Wed,
    Thu,
    Fri,
    Sat,
    Sun
};

// 全局预构建映射
std::unordered_map<std::string, WeekDay> StrToWeekDay = {
    {"Mon", Mon},
    {"Tue", Tue},
    {"Wed", Wed},
    {"Thu", Thu},
    {"Fri", Fri},
    {"Sat", Sat},
    {"Sun", Sun}
};

// 调用示例
int index = StrToWeekDay["Mon"]; // 得到索引0

2. nextDay函数实现

以C#为例,基于上述枚举转换逻辑,配合模7运算即可实现需求,同时支持正负天数偏移:

public string NextDay(string day, int number)
{
    // 校验输入的星期字符串合法性
    if (!Enum.TryParse<WeekDay>(day, out WeekDay currentDay))
    {
        throw new ArgumentException("输入的星期字符串不合法", nameof(day));
    }
    // 计算目标索引,加7再取模是为了兼容number为负数的情况
    int targetIndex = ((int)currentDay + number % 7 + 7) % 7;
    // 将目标索引转回星期字符串返回
    return Enum.GetName<WeekDay>((WeekDay)targetIndex);
}

调用测试:NextDay("Mon", 2) 返回结果为Wed,和你给出的示例要求一致。

内容的提问来源于stack exchange,提问作者sunny

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 23:21:00