1

这是我目前正在做的示例代码。

string stringWithDelimiters = "Hello%there%people%of%the%world";
string[] vals = new string[30];
vals = stringWithDelimiters.Split('%');

从上面的代码中,长度vals将为 6。但是有没有办法通过将其他变量的值设置为空字符串来“强制”数组使用全部 30,即使它小于 30?

4

4 回答 4

1

stringWithDelimiters.Split('%')返回一个数组。如果您直接在其中分配它,vals它将替换您之前刚刚创建的整个数组。

为了保留您的数组,您必须将Split方法返回的数组中的每个值插入到您的vals数组中。

尝试:

string stringWithDelimiters = "Hello%there%people%of%the%world";
string[] vals = new string[30];

for (int i = 0; i < vals.Length; i++)
    vals[i] = string.Empty;

var tmp = stringWithDelimiters.Split('%');

for (int i = 0; i < tmp.Length; i++)
    vals[i] = tmp[i];
于 2013-06-21T07:18:41.840 回答
1

This way the array vals will always have 30 elements. First fill the array with 30 empty strings then fill it with the Data that you split. I hope this helped you.

        string stringWithDelimiters = "Hello%there%people%of%the%world";
        string[] vals = new string[30];
        string[] vals1 = new string[30];
        vals1 = stringWithDelimiters.Split('%');
        int valslength = vals1.Length;
        for (int k = 0; k < 30; k++)
        {
            vals[k] = "";
        }
        for (int m = 0; m < valslength; m++)
        {
            vals[m] = vals1[m];
        }
于 2013-06-21T07:50:23.953 回答
1

Array.Copy通常是将元素从一个数组移动到另一个数组的最快方法。此解决方案会将拆分数组复制到 30 长度数组,然后用空字符串填充其余部分(如果有)。还要考虑到拆分数组的长度可能超过 30(或任何长度)。

private static string[] GetFixedLengthSplitArray(string input)
{
    const int TargetLength = 30;

    string[] splitResult = input.Split('%');
    string[] values = new string[TargetLength];

    Array.Copy(splitResult, 0, values, 0, Math.Min(splitResult.Length, values.Length));

    for (int i = splitResult.Length; i < values.Length; i++)
    {
        values[i] = string.Empty;
    }
    return values;
}
于 2013-06-21T08:01:54.730 回答
0

我刚刚发现了最快的解决方案。(我将使用@XLant 的解决方案)

tmp.CopyTo(vals, 0);

多谢你们!我会为他的回答设置一个。:)

于 2013-06-21T07:45:43.103 回答