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再次感谢你们,现在我知道如何接受一个解决方案:)非常感谢你们,这是我们列表中的最后一个练习。我这里还有另外两名学员,他们是