これは簡単すぎるように思われるため、おそらくあなたの質問を間違って解釈します。
- ソース配列を分割する配列の数を決定します。( totalCount / elementsPerArray )
- 各配列について:
- そこに入れる要素の数を決定します。( ElementsRemaining / arraysRemaining )
- それらの要素を新しい配列にコピーします。
コード内:
private static List<string[]> DivideStrings(int expectedStringsPerArray, string[] allStrings)
{
List<string[]> arrays = new List<string[]>();
int arrayCount = allStrings.Length / expectedStringsPerArray;
int elemsRemaining = allStrings.Length;
for (int arrsRemaining = arrayCount; arrsRemaining >= 1; arrsRemaining--)
{
int elementCount = elemsRemaining / arrsRemaining;
string[] array = CopyPart(allStrings, elemsRemaining - elementCount, elementCount);
arrays.Insert(0, array);
elemsRemaining -= elementCount;
}
return arrays;
}
private static T[] CopyPart<T>(T[] array, int index, int length)
{
T[] newArray = new T[length];
Array.Copy(array, index, newArray, 0, length);
return newArray;
}
このように使用すると:
const int count = 23;
const int estimate = 7;
string[] strings = Enumerable.Range(1, count).Select(s => s.ToString()).ToArray();
var list = DivideStrings(estimate, strings);
foreach (var arr in list)
Console.WriteLine(String.Join(" ", arr));
それは印刷します:
1 2 3 4 5 6 7 8
9 10 11 12 13 14 15 16
17 18 19 20 21 22 23