这是我目前正在做的示例代码。
string stringWithDelimiters = "Hello%there%people%of%the%world";
string[] vals = new string[30];
vals = stringWithDelimiters.Split('%');
从上面的代码中,长度vals
将为 6。但是有没有办法通过将其他变量的值设置为空字符串来“强制”数组使用全部 30,即使它小于 30?
这是我目前正在做的示例代码。
string stringWithDelimiters = "Hello%there%people%of%the%world";
string[] vals = new string[30];
vals = stringWithDelimiters.Split('%');
从上面的代码中,长度vals
将为 6。但是有没有办法通过将其他变量的值设置为空字符串来“强制”数组使用全部 30,即使它小于 30?
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];
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];
}
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;
}
我刚刚发现了最快的解决方案。(我将使用@XLant 的解决方案)
tmp.CopyTo(vals, 0);
多谢你们!我会为他的回答设置一个。:)