簡體   English   中英

將數組數據保存在變量中

[英]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.

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