我该如何划分的数组在C#中单独的数组? [英] How do I divide an array into separate arrays in C#?

查看:78
本文介绍了我该如何划分的数组在C#中单独的数组?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想写把字符串数组成的 N 的独立阵列的方法,每个大约是我指定的大小。

例如,如果我想的阵列划分了23元,那么如果我指定7作为元素的大致数量:

  8月1日元素的数组
第二个数组元素8
具有7个元素的数组第3

另一个例子是,如果有100个元素,我指定每个阵列18个元素,那么:

  1个数组20
第二阵20
第三阵20
第四阵20
5阵列20

到目前为止,我知道该函数需要返回字符串数组列表,但我不知道该怎么办过去认为:

 私人列表<字符串[]> divStrings(INT ExpectedStringsPerArray,
    字符串[] AllStrings)
{
    // ...
}

阵列的数量将是

  Math.Floor(AllStrings.Count()/ ExpectedStringsPerArray)

我如何划分一个数组单独的数组在C#?


解决方案

我大概间preT你的问题错了,因为这似乎太容易了:


  1. 确定成多少个阵列源阵列将被划分。 ( TOTALCOUNT / elementsPerArray 的)

  2. 对于每个数组:

    1. 确定有多少元素把它。 ( elementsRemaining / arraysRemaining 的)

    2. 的元素复制到一个新的数组。



在code:

 私有静态列表<字符串[]> DivideStrings(INT expectedStringsPerArray,字符串[] allStrings)
{
    清单<字符串[]>阵列=新的List<字符串[]>();    INT arrayCount = allStrings.Length / expectedStringsPerArray;    INT elemsRemaining = allStrings.Length;
    对于(INT arrsRemaining = arrayCount; arrsRemaining> = 1; arrsRemaining--)
    {
        INT与elementCount = elemsRemaining / arrsRemaining;        String []数组= CopyPart(allStrings,elemsRemaining - elementCount中,elementCount中);
        arrays.Insert(0,数组);        elemsRemaining - = elementCount中;
    }    返回数组;
}

 

 私有静态T [] CopyPart< T>(T []数组,INT指数,INT长度)
{
    T [] newArray =新的T [长度]
    Array.Copy(阵列,索引,newArray,0,长度);
    返回newArray;
}


当像这样使用:

  const int的数= 23;
const int的估计值= 7;
字符串[]字符串= Enumerable.Range(1,计数)。选择(S = GT; s.ToString())。ToArray的();
VAR列表= DivideStrings(估计字符串);
的foreach(在列表VAR ARR)
    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

I want to write a method that divides an array of strings into a n separate arrays, each of which is approximately the size I specify.

For example, if the array I want to divide had 23 elements, then if I specify 7 as the approximate number of elements:

1st array with 8 elements
2nd array with 8 elements 
3rd array with 7 elements

Another example is if there were 100 elements and I specify 18 elements per array, then:

1st array 20 
2nd array 20
3rd array 20
4th array 20
5th array 20

So far, I know that The function needs to return a list of string arrays, but I don't know what to do past that:

private List<string[]> divStrings(int ExpectedStringsPerArray, 
    string[] AllStrings)
{
    // ...
}

The number of arrays will be

 Math.Floor(AllStrings.Count()/ExpectedStringsPerArray) 

How do I divide an array into separate arrays in C#?

解决方案

I probably interpret your question wrong, as this seems too easy:

  1. Determine into how many arrays the source array will be divided. (totalCount / elementsPerArray)
  2. For each array:

    1. Determine how many elements to put in it. (elementsRemaining / arraysRemaining)
    2. Copy those elements to a new array.


In code:

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;
}


When used like this:

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));

It prints:

1 2 3 4 5 6 7 8
9 10 11 12 13 14 15 16
17 18 19 20 21 22 23

这篇关于我该如何划分的数组在C#中单独的数组?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆