C# 如何将列表拆分为已知大小的块,然后查找项目?我是c的新手#

C# 如何将列表拆分为已知大小的块,然后查找项目?我是c的新手#,c#,C#,我有一个字符串列表list和一个数字pageSize,一个pageNumber和一个rowname。我想按页面大小拆分此列表,并创建一个list列表,然后返回给定pageNumber和rowNumber处的元素。如果页码和行号高于可能的索引级别,则返回null。pageNumber和rowNumber都是基于零的索引 例如: list = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] pageSize = 3 pageNumber = 2 rowNumber = 1 Res

我有一个字符串列表
list
和一个数字
pageSize
,一个
pageNumber
和一个
rowname
。我想按页面大小拆分此列表,并创建一个
list
列表,然后返回给定
pageNumber
rowNumber
处的元素。如果页码和行号高于可能的索引级别,则返回
null
pageNumber
rowNumber
都是基于零的索引

例如:

list = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]
pageSize = 3
pageNumber = 2
rowNumber = 1
Result:List = [ [1, 2, 3], [4, 5, 6], [7, 8, 9], [10]]
Result = 8.
但此代码正在引发OutOfRange异常:

public static int? GetItemInThePagedDataList(IEnumerable<int> list, int pageSize, int pageNumber, int rowNumber)
{
    var lists = list.Chop(pageSize);
    if (pageNumber >= lists.Count() || rowNumber >= lists.First().Count())
    {
        throw new ArgumentOutOfRangeException();
    }
    return lists.ElementAt(pageNumber).ElementAt(rowNumber);
}

公共静态int?GetItemInThePagedDataList(IEnumerable列表、int pageSize、int pageNumber、int rowNumber)
{
var lists=list.Chop(页面大小);
如果(pageNumber>=lists.Count()| | rowNumber>=lists.First().Count())
{
抛出新ArgumentOutOfRangeException();
}
返回列表.ElementAt(页码).ElementAt(行号);
}

不需要拆分列表。编写一个这样的函数,并在索引处返回元素

public static int? GetItemInThePagedDataList(IEnumerable list, int pageSize, int pageNumber, int rowNumber) 
{
    int index = (pageSize * pageNumber) + rowNumber; 
    return list.ElementAt(index);
}

不需要拆分列表。编写一个这样的函数,并在索引处返回元素

public static int? GetItemInThePagedDataList(IEnumerable list, int pageSize, int pageNumber, int rowNumber) 
{
    int index = (pageSize * pageNumber) + rowNumber; 
    return list.ElementAt(index);
}

这是凯末尔解决方案的一个变体。如果页码和行号高于可能的索引级别,则此实现将返回null。我还实现了两次(一次用于
IEnumerable
,一次用于
IList
),因此
列表
场景的性能得到了显著提高

using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    public static int? GetItemInThePagedDataList(IEnumerable<int> list, int pageSize, int pageNumber, int rowNumber)
    {
        var index = (pageSize * pageNumber) + rowNumber;
        var nullableList = list.Select(z => (int?) z);
        return index < 0 ? null : nullableList.ElementAtOrDefault(index);
    }

    public static int? GetItemInThePagedDataList(IList<int> list, int pageSize, int pageNumber, int rowNumber)
    {
        var index = (pageSize * pageNumber) + rowNumber;
        return (index >= list.Count || index < 0) ? (int?)null : list[index];
    }

    static void Main(string[] args)
    {
        var list = new List<int> {1, 2, 3, 4};
        IEnumerable<int> items = list;  

        Console.WriteLine(GetItemInThePagedDataList(list, 2, 1, 1));
        Console.WriteLine(GetItemInThePagedDataList(items, 2, 1, 1));
        Console.WriteLine(GetItemInThePagedDataList(list, 2, 4, 1));
        Console.WriteLine(GetItemInThePagedDataList(items, 2, 4, 1));
        Console.WriteLine(GetItemInThePagedDataList(list, 2, -1, 1));
        Console.WriteLine(GetItemInThePagedDataList(items, 2, -1, 1));
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
班级计划
{

公共静态int?GetItemInPagedDataList(IEnumerable列表、int pageSize、int pageNumber、int rowNumber) { 变量索引=(页面大小*页面编号)+行编号; var nullableList=list.Select(z=>(int?)z); 返回索引<0?空:nullableList.ElementAtOrDefault(索引); }
公共静态int?GetItemInPagedDatalist(IList列表、int pageSize、int pageNumber、int rowNumber) { 变量索引=(页面大小*页面编号)+行编号; return(index>=list.Count | | index<0)?(int?)null:list[index]; } 静态void Main(字符串[]参数) { var list=新列表{1,2,3,4}; IEnumerable items=列表; WriteLine(GetItemInThePagedDataList(list,2,1,1)); Console.WriteLine(GetItemInThePagedDataList(items,2,1,1)); WriteLine(GetItemInThePagedDataList(list,2,4,1)); Console.WriteLine(GetItemInThePagedDataList(items,2,4,1)); WriteLine(GetItemInThePagedDataList(list,2,-1,1)); Console.WriteLine(GetItemInThePagedDataList(items,2,-1,1)); } }
这是凯末尔解决方案的一种变体。如果页码和行号高于可能的索引级别,则此实现将返回null。我还实现了两次(一次用于
IEnumerable
,一次用于
IList
),因此
列表
场景的性能得到了显著提高

using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    public static int? GetItemInThePagedDataList(IEnumerable<int> list, int pageSize, int pageNumber, int rowNumber)
    {
        var index = (pageSize * pageNumber) + rowNumber;
        var nullableList = list.Select(z => (int?) z);
        return index < 0 ? null : nullableList.ElementAtOrDefault(index);
    }

    public static int? GetItemInThePagedDataList(IList<int> list, int pageSize, int pageNumber, int rowNumber)
    {
        var index = (pageSize * pageNumber) + rowNumber;
        return (index >= list.Count || index < 0) ? (int?)null : list[index];
    }

    static void Main(string[] args)
    {
        var list = new List<int> {1, 2, 3, 4};
        IEnumerable<int> items = list;  

        Console.WriteLine(GetItemInThePagedDataList(list, 2, 1, 1));
        Console.WriteLine(GetItemInThePagedDataList(items, 2, 1, 1));
        Console.WriteLine(GetItemInThePagedDataList(list, 2, 4, 1));
        Console.WriteLine(GetItemInThePagedDataList(items, 2, 4, 1));
        Console.WriteLine(GetItemInThePagedDataList(list, 2, -1, 1));
        Console.WriteLine(GetItemInThePagedDataList(items, 2, -1, 1));
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
班级计划
{

公共静态int?GetItemInPagedDataList(IEnumerable列表、int pageSize、int pageNumber、int rowNumber) { 变量索引=(页面大小*页面编号)+行编号; var nullableList=list.Select(z=>(int?)z); 返回索引<0?空:nullableList.ElementAtOrDefault(索引); }
公共静态int?GetItemInPagedDatalist(IList列表、int pageSize、int pageNumber、int rowNumber) { 变量索引=(页面大小*页面编号)+行编号; return(index>=list.Count | | index<0)?(int?)null:list[index]; } 静态void Main(字符串[]参数) { var list=新列表{1,2,3,4}; IEnumerable items=列表; WriteLine(GetItemInThePagedDataList(list,2,1,1)); Console.WriteLine(GetItemInThePagedDataList(items,2,1,1)); WriteLine(GetItemInThePagedDataList(list,2,4,1)); Console.WriteLine(GetItemInThePagedDataList(items,2,4,1)); WriteLine(GetItemInThePagedDataList(list,2,-1,1)); Console.WriteLine(GetItemInThePagedDataList(items,2,-1,1)); } }
无需拆分原始列表。您只需使用公式index=pageSize*pageNumber+rowNumber。可能的重复项不需要拆分原始列表。你可以使用公式index=pageSize*pageNumber+rowNumber。可能是@kemal guler的重复,我已经尝试了你的代码kemal,我得到了相同的异常(outofreach)不要将你的列表类型作为IEnumerable发送。发送类型为var或string@RoyGuzman@mjwills:那么你主张什么
.Skip(index-1).First()
?我删除了@Flater的注释-它没有意义。public static int?GetItemInPagedDatalist(IEnumerable list,int pageSize,int pageNumber,int rowNumber){int index=(pageSize*pageNumber)+rowNumber;返回list.ElementAtOrDefault(index);}…..这是另一个同样有效的变体。@kemal guler,我已经尝试了你的代码kemal,我得到了相同的异常(outofreach)不要将列表类型作为IEnumerable发送。发送类型为var或string@RoyGuzman@mjwills:那么你主张什么
.Skip(index-1).First()
?我删除了@Flater的注释-它没有意义。public static int?GetItemInPagedDatalist(IEnumerable list,int pageSize,int pageNumber,int rowNumber){int index=(pageSize*pageNumber)+rowNumber;return list.elementAtOrderFault(index);}…..这是另一个有效的变体。感谢大家,这是我们列表中的最后一个练习。我这里还有另外两名学员,他们也向我致意。我们真的搞不懂,再次谢谢你。:)(a) mjwills和@Kemalt再次感谢你们,现在我知道如何接受一个解决方案:)非常感谢你们,这是我们列表中的最后一个练习。我这里还有另外两名学员,他们是