列表的相等部分的限制,最后部分全部超出
limits of equal portions of a list with last portion getting all excess
我正在寻找划分给定列表的最佳方法,例如包含 200 个数字的列表。
我想把它分成 3 个部分,所以我知道还有剩余部分。
这是我带来的,我相信有更好的方法:
int divider = 3;
int lastElements = this.mylist.size() % divider;
int listpart = this.mylist.size() / divider;
int listpartStart = 0;
int listpartEnd = listpart-1;
for(int i=0;i<divider;i++) {
if(i==divider-1) {
listpartEnd+=lastElements;
}
listpartEnd;
listpartStart;
someHandlingFunction(listpartStart,listpartEnd);
listpartEnd+=listpart;
listpartStart+=listpart;
}
提出这一要求的简明实施的关键是认识到最后一部分,即应该获得多余部分的部分,是一种特殊情况。所以,循环divisor-1
次,最后单独处理最后的部分。
void split(int size, int divider)
{
int part = size / divider;
for(int i=1; i<divider; i++)
{
someHandlingFunction((i-1)*part, (i*part)-1);
}
someHandlingFunction((divider-1)*part, size-1);
}
void someHandlingFunction(int start, int end)
{
System.out.println(start + " - " + end);
}
注意 - 您可能需要为 size < divider
的情况添加检查并适当处理它。
测试:
split(200, 3);
输出:
0 - 65
66 - 131
132 - 199
我正在寻找划分给定列表的最佳方法,例如包含 200 个数字的列表。
我想把它分成 3 个部分,所以我知道还有剩余部分。
这是我带来的,我相信有更好的方法:
int divider = 3;
int lastElements = this.mylist.size() % divider;
int listpart = this.mylist.size() / divider;
int listpartStart = 0;
int listpartEnd = listpart-1;
for(int i=0;i<divider;i++) {
if(i==divider-1) {
listpartEnd+=lastElements;
}
listpartEnd;
listpartStart;
someHandlingFunction(listpartStart,listpartEnd);
listpartEnd+=listpart;
listpartStart+=listpart;
}
提出这一要求的简明实施的关键是认识到最后一部分,即应该获得多余部分的部分,是一种特殊情况。所以,循环divisor-1
次,最后单独处理最后的部分。
void split(int size, int divider)
{
int part = size / divider;
for(int i=1; i<divider; i++)
{
someHandlingFunction((i-1)*part, (i*part)-1);
}
someHandlingFunction((divider-1)*part, size-1);
}
void someHandlingFunction(int start, int end)
{
System.out.println(start + " - " + end);
}
注意 - 您可能需要为 size < divider
的情况添加检查并适当处理它。
测试:
split(200, 3);
输出:
0 - 65
66 - 131
132 - 199