簡體   English   中英

如何在C#中從二維矩形字符數組的一行創建一個字符串?

[英]How do I create a string from one row of a two dimensional rectangular character array in C#?

我有一個二維數組,像這樣:

char[,] str = new char[2,50];

現在,在將內容存儲在str [0]和str [1]中之后,如何將其存儲在

string[] s = new string[2];

我試過了

s[0] = str[0].ToString();

但這似乎是一個錯誤:VC#期望括號內有“兩個”索引,這意味着我只能從數組中轉換一個字符。 有沒有辦法將整個str [0]轉換為字符串? 還是將其更改為鋸齒狀數組是唯一的解決方案?

出於各種原因,鋸齒狀陣列幾乎總是最佳解決方案,這是一個很好的例子。 與多維數組相比,數組數組具有更大的靈活性。 在這種情況下,一旦將值包含在char數組中,就可以使用字符串類上的構造函數從中創建一個字符串。

而且,鋸齒狀數組將由“向量”(即具有零下限索引的一維數組)組成,在.Net中更受青睞,因為CLR對它們進行了特殊處理。

因此,不知道您程序的其余部分在做什么,這就是我的建議。

如果確實嘗試通過遍歷數組索引而不是使用鋸齒狀數組來手動構造字符串,則建議使用StringBuilder類來實現。

我只是把它撞了,但應該是這樣的:

// For the multi-dimentional array
StringBuilder sb = new StringBuilder();
for (int stringIndex = 0; stringIndex < s.Length; stringIndex++)
{
  sb.Clear();
  for (int charIndex = 0; charIndex < str.UpperBound(1); charIndex++)
    sb.Append(str[stringIndex,charIndex]);
  s[stringIndex] = sb.ToString();
}

// For the jagged array
for (int index = 0; index < s.Length; index++)
  s[index] = new string(str[index]);

假設尺寸固定為2x50:

char[,] str = new char[2,50];

// populate str somehow

// chose which of the strings we want (the 'row' index)
int strIndex = 0;
// create a temporary array (faster and less wasteful than using a StringBuilder)
char[] chars = new chars[50];
for (int i = 0; i < 50; i++)
  chars[i] = str[strIndex, i];
string s = new string[chars];

如果使用鋸齒狀數組,這將更容易且性能更高:

char[][] str = new char[2][];

然后,您可以編寫:

string s = new string(characters[0]);

我同意使用鋸齒狀數組。 您可以使用以下輔助方法來初始化鋸齒狀的數組:

static T[][] InitJaggedArray<T>(int dimension1, int dimension2)
{
    T[][] array = new T[dimension1][];
    for (int i = 0; i < dimension1; i += 1)
    {
        array[i] = new T[dimension2];
    }
    return array;
}

所以

char[,] str = new char[2,50];

會成為

char[][] str = ArrayHelper.InitJaggedArray<char>(2, 50);

然后,您將像這樣訪問其中的元素

str[0, 10] = 'a';

並使其成為字符串,你會做

string s = new string(str[0]);

您可以使用LINQ做到這一點:

string[] Convert(char[,] chars)
{
    return Enumerable.Range(0, chars.GetLength(1))
                     .Select(i => Enumerable.Range(0, chars.GetLength(0))
                                            .Select(j => chars[j, i]))
                     .Select(chars => new string(chars.ToArray());
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM