博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
将序列分成若干块的辅助类 ChunkHelper
阅读量:4961 次
发布时间:2019-06-12

本文共 2680 字,大约阅读时间需要 8 分钟。

 
///
<summary>
///
ChunkHelper 帮助将序列分成若干块。
///
///
如果 totalItemCount 是 11,chunkSize 是 5,则:
///
chunk[0] 0, 1, 2, 3, 4
///
chunk[1] 5, 6, 7, 8, 9
///
chunk[2] 10
///
</summary>
public
class
ChunkHelper
{
///
<summary>
///
///
</summary>
///
<param name="totalItemCount">
项目总数
</param>
///
<param name="chunkSize">
块大小
</param>
public
ChunkHelper(
int
totalItemCount,
int
chunkSize)
{
if
(totalItemCount
<
0
)
{
throw
new
ArgumentOutOfRangeException(
"
itemCount
"
, totalItemCount,
"
itemCount 不能小于 0
"
);
}
if
(chunkSize
<
1
)
{
throw
new
ArgumentOutOfRangeException(
"
chunkSize
"
, chunkSize,
"
chunkSize 不能小于 1
"
);
}
this
.TotalItemCount
=
totalItemCount;
this
.ChunkSize
=
chunkSize;
int
i
=
this
.TotalItemCount
%
this
.ChunkSize
==
0
?
0
:
1
;
this
.ChunkCount
=
this
.TotalItemCount
/
this
.ChunkSize
+
i;
}
///
<summary>
///
获取项目总数。
///
</summary>
public
int
TotalItemCount {
get
;
private
set
;}
///
<summary>
///
获取块大小。
///
</summary>
public
int
ChunkSize {
get
;
private
set
; }
///
<summary>
///
指定项目索引,获取此项目所属的分块索引。
///
</summary>
///
<param name="itemIndex"></param>
///
<returns></returns>
public
int
GetChunkIndex(
int
itemIndex)
{
if
(itemIndex
<
0
||
itemIndex
>=
TotalItemCount)
{
throw
new
ArgumentOutOfRangeException();
}
return
itemIndex
/
ChunkSize;
}
///
<summary>
///
获取分块数量,如果 TotalItemCount 为 0, 则返回值为 0,而不是 1。
///
</summary>
public
int
ChunkCount {
get
;
private
set
;}
///
<summary>
///
获取指定的分块信息。
///
</summary>
///
<param name="chunkIndex"></param>
///
<returns></returns>
public
Chunk GetChunk(
int
chunkIndex)
{
if
(chunkIndex
<
0
||
chunkIndex
>=
ChunkCount)
{
throw
new
ArgumentOutOfRangeException();
}
int
startItemIndex
=
chunkIndex
*
ChunkSize;
int
itemCountInChunk
=
ChunkSize;
//
如果大于项目总数,则是最后一块
if
(startItemIndex
+
itemCountInChunk
>
TotalItemCount)
{
itemCountInChunk
=
TotalItemCount
%
ChunkSize;
}
return
new
Chunk(chunkIndex, startItemIndex, itemCountInChunk);
}
}
///
<summary>
///
Chunk 表示一个分块。
///
</summary>
public
struct
Chunk
{
///
<summary>
///
本块的索引。
///
</summary>
public
int
ChunkIndex {
get
;
private
set
;}
///
<summary>
///
本块第一个项目在整个序列中的索引。
///
</summary>
public
int
FirstItemIndex{
get
;
private
set
;}
///
<summary>
///
本块的项目数。
///
</summary>
public
int
ItemCount {
get
;
private
set
;}
///
<summary>
///
实例化 Chunk
///
</summary>
///
<param name="chunkIndex"></param>
///
<param name="firstItemIndex"></param>
///
<param name="itemCountInChunk"></param>
internal
Chunk(
int
chunkIndex,
int
firstItemIndex,
int
itemCountInChunk)
:
this
()
{
this
.ChunkIndex
=
chunkIndex;
this
.FirstItemIndex
=
firstItemIndex;
this
.ItemCount
=
itemCountInChunk;
}
}

转载于:https://www.cnblogs.com/illusion/archive/2011/04/13/2014985.html

你可能感兴趣的文章
URL中的特殊字符处理
查看>>
HOT SUMMER 每天都是不一样,积极的去感受生活 C#关闭IE相应的窗口 .
查看>>
windows平台上编译mongdb-cxx-driver
查看>>
optionMenu-普通菜单使用
查看>>
MVC3分页传2参
查看>>
2016-2017-2点集拓扑作业[本科生上课时]讲解视频
查看>>
appium(13)- server config
查看>>
IIS负载均衡-Application Request Route详解第六篇:使用失败请求跟踪规则来诊断ARR...
查看>>
管理信息系统 第三部分 作业
查看>>
[Leetcode Week13]Search a 2D Matrix
查看>>
查看端口占用cmd命令
查看>>
2019.01.17王苛震作业
查看>>
Halcon学习(八)文本操作
查看>>
MFC电子词典
查看>>
简单工厂(Simple Factory)
查看>>
04: 打开tornado源码剖析处理过程
查看>>
02: 安装epel 解决centos7无法使用yum安装nginx
查看>>
清除浮动
查看>>
PayPal(贝宝)支付接口、文档、IPN
查看>>
ORACLE 10G R2_执行计划中cost cardinality bytes cpu_cost io_cost解释
查看>>