比如我有一个list集合 ,里面有9个元素 ,要把这个集合的元素平均分给5个新的集合 ,怎么分的 ,最后剩余一个就只分一个 ,也就是各个集合的元素个数分别是2.2.2.2.1 如果多出来,就把剩余的都放在最后一个 。 注意: 我用的版本是framework 2.0 linq这些用不了。。。。。。。
将5个集合放到一个新集合中,当list的集合不为空的时候循环新集合往5个集合添加元素同时从list集合移除元素
nice 就是这个方法
List<string> strList = new List<string>() { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
List<List<string>> list = new List<List<string>>();
int i = 0;
int count = 4;
while (i < strList.Count)
{
List<string> item = new List<string>();
if (i + count >= strList.Count)
{
for (int s = 0; s < strList.Count - i; s++)
{
item.Add(strList[s + i]);
}
list.Add(item);
break;
}
for (int j = 0; j < count; j++)
{
item.Add(strList[j + i] + ",");
}
list.Add(item);
i = i + count;
}
foreach (var item in list)
{
for (int p = 0; p < item.Count; p++)
{
Console.Write(item[p]);
}
Console.WriteLine("");
}
一种比较笨的实现
class Program
{
static void Main(string[] args)
{
var ungroupedList = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
var toalCount = ungroupedList.Count;
int groupCount = 5;
int groupItemCount = (int)Math.Ceiling((double)toalCount / groupCount);
var groupListArray = new List<int>[groupCount];
for (int i = 0; i < groupCount; i++)
{
groupListArray[i] = new List<int>();
var count = Math.Min(toalCount - i * groupItemCount, groupItemCount);
groupListArray[i].AddRange(ungroupedList.GetRange(i * groupItemCount, count));
}
for (var i = 0; i < groupListArray.Length; i++)
{
Console.WriteLine("List" + (i + 1) + ": " + string.Join(",", groupListArray[i]));
}
}
}
string.Join(",", groupListArray[i]) 这个方法好像只适用于字符串吧?
越来越得靠自己好好思考了
– Anlien-Bei 6年前