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

如何根据源数组的两个索引匹配第二个数组的首个最近日期索引?

问题:基于长数组的索引区间匹配短数组的目标日期索引

测试数组示例

Long_Array(长数组)

索引日期
020180101
120180605
220181115
320190225
420190714
520200321
620210110

Short_Array(短数组)

索引日期
020170906
120171218
220180112
320180216
420180425
520180520
620180603
720180721
820180817

需求说明

给定长数组的两个连续索引(如示例中的0和1),需要在短数组中找到两个目标索引:

  • 第一个索引:首个日期大于等于长数组索引0对应日期的元素(示例中对应短数组索引2的20180112)
  • 第二个索引:最后一个日期小于长数组索引1对应日期的元素(示例中对应短数组索引6的20180603)
    示例预期输出为:2 和 6

现有代码问题

你编写的代码如下:

int indexFrom = Array.FindIndex(Short_Array, row => Convert.ToInt32(row.Date) >= Convert.ToInt32(Long_Array[i].Date));
int indexTo = Array.FindIndex(Short_Array, row => Convert.ToInt32(row.Date) < Convert.ToInt32(Long_Array[i + 1].Date));

问题出在indexTo的获取逻辑:Array.FindIndex会返回第一个满足条件的元素索引,而你需要的是最后一个符合条件的元素索引。比如示例中,短数组里第一个小于20180605的元素是索引0,完全不符合预期。

解决方案

方法1:使用Array.FindLastIndex

直接用Array.FindLastIndex查找最后一个符合条件的元素,同时优化日期转换的类型避免溢出:

// 预先转换日期为长整数,避免重复转换且防止Int32溢出
long longDateFrom = Convert.ToInt64(Long_Array[i].Date);
long longDateTo = Convert.ToInt64(Long_Array[i + 1].Date);

// 找首个大于等于目标起始日期的元素索引
int indexFrom = Array.FindIndex(Short_Array, row => Convert.ToInt64(row.Date) >= longDateFrom);

// 找最后一个小于目标结束日期的元素索引
int indexTo = Array.FindLastIndex(Short_Array, row => Convert.ToInt64(row.Date) < longDateTo);

方法2:使用LINQ查询

如果项目允许使用LINQ,可通过索引筛选实现:

var longDateFrom = Convert.ToInt64(Long_Array[i].Date);
var longDateTo = Convert.ToInt64(Long_Array[i + 1].Date);

// 获取首个符合起始条件的元素索引,无匹配则返回-1
int indexFrom = Short_Array.Select((row, idx) => new { row, idx })
                          .FirstOrDefault(x => Convert.ToInt64(x.row.Date) >= longDateFrom)?
                          .idx ?? -1;

// 获取最后一个符合结束条件的元素索引,无匹配则返回-1
int indexTo = Short_Array.Select((row, idx) => new { row, idx })
                        .LastOrDefault(x => Convert.ToInt64(x.row.Date) < longDateTo)?
                        .idx ?? -1;

额外优化建议

  • 预先转换日期:将两个数组的日期字符串一次性转换为long类型存储,避免重复转换提升性能。
  • 边界处理:添加无匹配时的默认值(如-1),避免空引用异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 09:18:29