c# - 检索列表中先前的索引记录(如果存在)
问题描述
我正在使用 .NET 3.5 。我的要求是遍历按日期降序排列的对象列表,找到特定记录的匹配项,捕获该对象,然后,如果在此之前的日期存在记录,这意味着捕获的对象的索引减一(如果存在),也捕获此对象,这意味着我的输出列表可以有一条记录或两条记录,具体取决于是否有以前的日期记录。有没有一种干净的方法来实现这一目标?
我尝试捕获匹配记录的索引并通过向索引添加 -1 来获取前一个索引>>如果前一个元素不存在,则索引超出范围异常的风险。
如何避免索引越界异常,但检查前一个元素是否存在(如果存在)?我确信有一种更清洁的方式来做这件事,而不是我正在尝试的方式。因此,如果有更好的方法可以做到这一点,我会向您寻求建议......
任何建议都受到高度赞赏。谢谢
解决方案
看看下面。对象只是一个 datetimeoffset,但应该说明 LINQ 查询。您正在寻找 .Top(2) (如果您需要按某些东西分组,这可能会更复杂):
下面是 LinqPad 示例,但应该很容易粘贴到控制台应用程序中。
void Main()
{
var threeItems = new List<DateTimeOffset>(new[] { DateTimeOffset.Now, DateTimeOffset.Now.AddDays(-1), DateTimeOffset.Now.AddDays(-2) });
var twoItems = new List<DateTimeOffset>(new[] { DateTimeOffset.Now, DateTimeOffset.Now.AddDays(-1) });
var oneItem = new List<DateTimeOffset>(new[] { DateTimeOffset.Now });
ShowItems(GetItems(threeItems));
ShowItems(GetItems(twoItems));
ShowItems(GetItems(oneItem));
}
IEnumerable<DateTimeOffset> GetItems(List<DateTimeOffset> items)
{
return items
.OrderByDescending(i => i)
.Select(i => i)
.Take(2);
}
void ShowItems(IEnumerable<DateTimeOffset> items)
{
Console.WriteLine("List of Items:");
foreach (var item in items)
{
Console.WriteLine(item);
}
}
推荐阅读
- passport.js - Actions on Google 中的帐户与我自己的 OAuth 服务器的关联
- javascript - 将数组中的对象的属性与另一个数组进行比较
- javascript - 用于比较文本的 Javascript 不起作用
- rust - 在另一个结构中嵌入带有泛型函数的 Rust 泛型
- nim-lang - 如何从 Nim 中的文件异步读取?
- rust - 我可以修改 BinaryHeap 中不是最高值的值吗?
- ios - Swift - UDP 接收和发送
- c - printf 在一定程度上跟随零
- java - 在 Javafx 中为图形编辑器创建带有 ui 组件的自定义形状
- python - 获取列表索引必须是整数或切片,而不是 str