gpt4 book ai didi

c# - 使用 LINQ 和 C# 选择子集合的算法/模式

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:16:54 25 4
gpt4 key购买 nike

我有一个 C# 字符串集合。每个字符串都是一个可以出现在页面上的句子。我还有一个分页符集合,它是 int 的集合。表示字符串集合被拆分到新页面的索引。

示例:字符串集合中的每 10 个项目是一个页面,因此分页符的集合将是值为 10、20、30 的 int 的集合。...

因此,如果有 2 页字符串,则分页符集合中将有 1 个项目,如果有 1 页,则分页符集合中将有零个项目。

我正在尝试创建以下函数:

List<string> GetPage(List<string> docList, List<int> pageBreakList, int pageNum)
{
// This function returns a subset of docList - just the page requested
}

我在编写这个函数时进行了一些尝试,并不断提出复杂的 if 和 switch 语句,以考虑单页和两页文档以及超出范围请求的页码(例如,最后一页应该返回如果如果页码为 0 或更小,则页码大于页数和第一页)。

我与这个问题的斗争让我问了一个问题:是否有一个众所周知的模式或算法来解决这种类型的子集查询?

最佳答案

不确定分页符列表的用途。我会这样想。字符串、页码和页面大小的集合。然后你可以这样做:

List<string> strings = ...
int pageNum = ...
int pageSze = ...

if (pageNum < 1) pageNum = 1;
if (pageSize < 1) pageSize = 1;

List<string> pageOfStrings = strings.Skip( pageSize*(pageNum-1) ).Take( pageSize ).ToList();

如果根据您的评论每页的页数不同,请尝试以下操作。您可能需要调整边缘条件检查...

List<string> strings = ...
List<int> sizes = ...

int pageNum = ...
int itemsToSkip = 0;
int itemsToTake = 1;

if (pageNum > 1)
{
sizes.Take( pageNum - 2).Sum();

if (pageNum <= sizes.Count)
{
itemsToTake = sizes[pageNum-1]
}
{

List<string> pageOfStrings = strings.Skip( itemsToSkip ).Take( itemsToTake );

关于c# - 使用 LINQ 和 C# 选择子集合的算法/模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/238340/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com