[英]Save array data in variable
我使用函數來解決霍夫曼編碼算法,但該函數將字符串變量作為數據,但我希望在我編寫array.ToString()
時將其作為數組, array.ToString()
該函數會打印一些不需要的結果,因為我沒有給數組array.ToString()
變量。 這是功能代碼
public static void GenerateCode(Node parentNode, string code)
{
if (parentNode != null)
{
GenerateCode(parentNode.leftChild, code + "0");
if (parentNode.leftChild == null && parentNode.rightChild == null)
Console.WriteLine(parentNode.data + "{" + code + "}");
GenerateCode(parentNode.rightChild, code + "1");
}
}
這是我對函數的主要要求:
GenerateCode(parentNode1,array.ToString());
這是結果的照片:
我不需要顯示System.Int[]
您想使用string.Join()
。
GenerateCode(parentNode1, string.Join("", array));
您需要做的是傳入int數組的字符串表示形式。
您可以使用:
GenerateCode(parentNode1, String.Join("", array));
它將所有int連接成一個字符串,如10001010101010111011101
問題在於該語言不會覆蓋array.ToString()
。 相反,您可能想使用另一個函數,例如string.Concat
:
GenerateCode(parentNode1, string.Concat(array));
您得到的結果是因為ToString()
( object.ToString()
的默認實現)會打印出類型信息。
雖然如果您確實可以控制GenerateCode
方法,但我強烈建議您修改其參數類型以接受IEnumerable<T>
或數組。 除非必要,否則轉換為string
將失去強類型的一些主要好處。 我會在方法中而不是在方法之前進行轉換。 這樣一來,您以后就可以更改實現,而不必擔心傳遞什么參數。
此外,我很想將您的值寫入StringBuilder
而不是控制台,因為這在大多數實際應用程序中會更加有用。
public static void GenerateCode(StringBuilder builder, Node parentNode, IEnumerable<int> values)
{
if (parentNode != null)
{
GenerateCode(builder, parentNode.leftChild, Concat(values, 0));
if (parentNode.leftChild == null && parentNode.rightChild == null)
builder.AppendLine(string.Format("{0}{{{1}}}", parentNode.data, string.Concat(values));
GenerateCode(builder, parentNode.rightChild, Concat(values, 1));
}
}
private static IEnumerable<T> Concat(IEnumerable<T> coll, T obj)
{
foreach (var v in coll)
yield return v;
yield return obj;
}
然后,您可以這樣稱呼它。
StringBuilder builder = new StringBuilder();
GenerateCode(builder, parentNode1, array);
Console.Write(builder.ToString());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.