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

如何用LINQ查询string[]中时间戳最小的CSV文件名

解决方法:用LINQ找到时间戳最小的CSV文件名

嘿,我来帮你搞定这个需求!要从你的string[] files数组里找出时间戳最小的文件名,我们可以用LINQ一步到位,还能妥善处理各种边界情况。

正确的实现代码

public string GetOldestCsvFile(string[] files)
{
    // 先做空值与空数组检查,避免运行时异常
    if (files == null || files.Length == 0)
        return null;

    // 通过LINQ关联文件名与时间戳,排序后取最旧的文件名
    return files
        .Select(file => new 
        {
            FileName = file,
            // 灵活提取时间戳:分割文件名后处理后缀,解析失败则设为最大值(排到最后)
            Timestamp = long.TryParse(file.Split('_').Last().Replace(".csv", ""), out long ts) ? ts : long.MaxValue
        })
        .OrderBy(item => item.Timestamp)
        .FirstOrDefault()?
        .FileName;
}

代码细节解释

  • 空值防护:先判断输入数组是否为空或null,直接返回null避免空引用异常。
  • 关联文件名与时间戳:用Select将每个文件名转换为包含原始文件名和对应时间戳的匿名对象,确保排序后还能拿到对应的文件名。
  • 通用时间戳提取:没有硬编码前缀john_q1_,而是通过Split('_')分割文件名,取最后一段处理掉.csv后缀后解析,就算以后文件名前缀变化,代码也能正常工作;用long解析是因为时间戳可能超出int的取值范围,解析失败的文件会被设为最大时间戳,自动排到最后不影响结果。
  • 排序取结果:按时间戳升序排序后,取第一个元素的文件名就是我们要的最旧文件。

你现有代码的问题调整

看了你编辑的代码,有几个关键点需要修正:

  1. 方法返回类型应该是string而不是void,因为你需要返回文件名。
  2. 硬编码替换前缀的方式不够灵活,改用分割字符串的方式适配更多可能的文件名格式。
  3. 你只提取了时间戳,但需求是返回对应的文件名,所以必须保留文件名和时间戳的关联关系。
  4. 用int存储时间戳存在溢出风险,建议用long类型更稳妥。

调整后调用这个方法,就能得到你想要的john_q1_1527421034.csv这类时间戳最小的文件名啦。

内容的提问来源于stack exchange,提问作者Michael D.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:08:47