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

如何存储含重复值的成对字符串数据?技术方案咨询

解决脚本名称与触发时间成对存储(支持重复)的方案

嘿,这个场景我太有共鸣了!确实,Dictionary在这儿完全派不上用场——不管你把脚本名称还是触发时间当键,只要出现重复值,后面的条目就会直接覆盖前面的,根本存不下同一脚本多次触发、或者多脚本同一时间触发的情况。

给你几个实用的解决方案,从基础存储到高效查询都覆盖到了:

1. 基础存储:自定义类 + List

最直接的方式是先定义一个类来封装每一组脚本名称和触发时间,然后用List来存储所有条目:

// 定义存储单个脚本调度的类
public class ScriptSchedule
{
    public string ScriptName { get; set; }
    // 推荐用TimeSpan代替字符串,避免格式错误,也方便时间计算
    public TimeSpan TriggerTime { get; set; }
}

// 初始化存储列表
var scriptSchedules = new List<ScriptSchedule>
{
    new ScriptSchedule { ScriptName = "数据备份脚本", TriggerTime = new TimeSpan(2, 0, 0) },
    new ScriptSchedule { ScriptName = "数据备份脚本", TriggerTime = new TimeSpan(14, 0, 0) },
    new ScriptSchedule { ScriptName = "日志清理脚本", TriggerTime = new TimeSpan(2, 0, 0) }
};

这种方式完全支持重复值,不管是脚本名称重复还是触发时间重复,所有条目都能完整保存。

2. 高效查询:用分组字典优化检索

如果需要频繁根据触发时间或脚本名称查询对应的条目,可以用LINQ把列表分组转换成字典,提升查询效率:

按触发时间分组(快速找某一时间的所有脚本)

// 构建"触发时间 -> 对应脚本列表"的字典
var timeToScripts = scriptSchedules
    .GroupBy(s => s.TriggerTime)
    .ToDictionary(g => g.Key, g => g.ToList());

// 查询凌晨2点触发的所有脚本
if (timeToScripts.TryGetValue(new TimeSpan(2, 0, 0), out var scriptsAt2Am))
{
    foreach (var script in scriptsAt2Am)
    {
        Console.WriteLine($"脚本:{script.ScriptName},触发时间:{script.TriggerTime}");
    }
}

按脚本名称分组(快速找某一脚本的所有触发时间)

// 构建"脚本名称 -> 对应触发时间列表"的字典
var scriptToTimes = scriptSchedules
    .GroupBy(s => s.ScriptName)
    .ToDictionary(g => g.Key, g => g.Select(s => s.TriggerTime).ToList());

// 查询"数据备份脚本"的所有触发时间
if (scriptToTimes.TryGetValue("数据备份脚本", out var backupTimes))
{
    foreach (var time in backupTimes)
    {
        Console.WriteLine($"触发时间:{time}");
    }
}

3. 额外提示:用TimeSpan代替字符串的好处

如果用TimeSpan类型存储触发时间,相比字符串有几个优势:

  • 避免手动输入格式错误(比如写成"2:00"而不是"02:00:00")
  • 方便进行时间比较、计算(比如判断当前时间是否接近触发时间)
  • 序列化/反序列化时更可靠

当然,如果你的业务场景必须用字符串格式,把TimeSpan改成string类型就行,逻辑完全通用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:51:49