将数组数据保存在变量中

时间:2014-08-12 20:38:44

标签: c# arrays system

我使用函数来解决霍夫曼编码算法,但函数将字符串变量作为数据,但我希望它在我写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");

    }
}

这是我对main中函数的调用:

GenerateCode(parentNode1,array.ToString());

这是照片的结果:

image

我不需要显示System.Int[]

3 个答案:

答案 0 :(得分:1)

您想使用string.Join()

GenerateCode(parentNode1, string.Join("", array));

答案 1 :(得分:1)

您需要做的是传入int数组的字符串表示。

您可以使用:

GenerateCode(parentNode1, String.Join("", array));

将所有内容连接成一个字符串,如10001010101010111011101

答案 2 :(得分:1)

问题是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}{StringBuilder builder = new StringBuilder();
GenerateCode(builder, parentNode1, array);
Console.Write(builder.ToString());
}", 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;
}

然后你可以这样称呼它。

{{1}}