[英]how to copy an array into a jagged array
當我嘗試將數組復制到鋸齒狀的數組中時。 我的目標是采用char類型的數組,將“單詞”分隔為單獨的數組(我使用了已經起作用的函數)並將其放入數組中。
static char[][] split_string(char[] str)
{
int length = count_words(str);
char[][] sentence = new char[length][];
int start = 0;
int end = 0;
int word = 0;
int i = -1;
while (i != str.Length)
{
i++;
if (str[i]==' ')
{
end = i-1;
char[] aux_array = substring(str, start, end);
//issue
aux_array.CopyTo(sentence[word], 0);
//alternative (not working either)
/*
for(int j=0; j<aux_array.Length;j++)
{
sentence[word][j] = aux_array[j];
}
*/
while (str[i]==' ')
{
i++;
}
word++;
start = i;
}
}
return sentence;
}
有關信息,
子字符串,如果形式為:substring(array,int,int)->數組count_word的形式為:count_word(array)-> int
我的目標是采用char類型的數組,將“單詞”分隔為單獨的數組(我使用了已經起作用的函數)並將其放入數組中。
然后將它們放入數組
//...
sentence[word] = substring(str, start, end);
請注意,鋸齒狀數組元素默認情況下為null
,並且您沒有分配它們,因此您可能會得到空引用異常。 如果您確實需要復制返回的數組,那么最簡單的方法是使用Array.Clone
方法,如下所示
sentence[word] = (char[])substring(str, start, end).Clone();
使用字符串而不是原始char數組更容易,但是我認為您決定使用char數組是有意的。
一種簡化代碼的方法是在運行時構建char數組,而不是對其進行預分配。 .NET數組具有固定的大小,但是List<T>
允許您增長項目的集合。
您也可以將函數更改為迭代器塊,以進一步簡化它。 完成一個單詞后,您就將其yield return
給呼叫者。
IEnumerable<char[]> SplitString(char[] str) {
var word = new List<char>();
foreach (var ch in str) {
if (ch == ' ') {
if (word.Count > 0) {
yield return word.ToArray();
word = new List<char>();
}
}
else
word.Add(ch);
}
if (word.Count > 0)
yield return word.ToArray();
}
此函數不會返回數組,因此,如果要數組數組(鋸齒狀數組),則需要使用ToArray()
:
var str = "The quick brown fox jumps over the lazy dog".ToCharArray();
var result = SplitString(str).ToArray();
此代碼將正確處理源字符串開頭和結尾的多個空格和空格。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.