首页 > 解决方案 > 从对象列表中获取 n 个(部分)对象,从 n 个索引开始

问题描述

我有一个 n 个对象的列表。我想从选定的索引开始最多抓取 n 个项目(-n 个以前的项目和 n + 下一个项目)。我想要一种方法,在其中我为列表提供某些参数。

如何在 C# 中实现这一点?

第一个示例:
int selectedIndex = 5
int itemsToTake = 4(2 个上一个和 2 个下一个)
返回列表 = 3-4-5-6-7

第二个示例:
int selectedIndex = 1
int itemsToTake = 4(取 1 个上一个和 3 个下一个,因为列表以 0 开头)
返回列表 = 0-1-2-3-4

我已经尝试过 list.skip().take() 的组合,只是效果不太好。

例子:

nextIndex = nextIndex - prevIndex + 1;
return List.Skip (prevIndex) .Take (nextIndex) .ToList ();

标签: c#listlinq

解决方案


Skip + Take 应该可以正常工作,试试这个:

int firstIndex = selectedIndex - itemsToTake / 2;
firstIndex = firstIndex < 0 ? 0 : firstIndex;
return list.Skip(firstIndex).Take(itemsToTake);

推荐阅读