无法在C#List <char []>中添加新值

时间:2016-02-23 11:56:54

标签: c#

我有一个简单的递归程序来查找给定字符串的所有不同的排列。我使用递归函数go()来计算排列并使用List<char[]>来存储permations。在计算之后,该函数检查List<char[]>中是否已存在排列。如果没有,则会将其添加到列表&lt;&gt;中。

现在问题就在于,排列的计算得到了完美的计算,但是当我尝试将它们添加到列表中时,它并没有添加当前值。这是添加的代码。

List<char[]> l;
public void go(char[] list, int k, int m)
{
if (k == m)
{
     Console.WriteLine(list); //print to check
     l.Add(list); //add it to the list
}
// more code
}

现在 input = ABC ,我得到以下输出..

ABC
ACB
BAC
BCA
CBA
CAB

这是正确的,因为我直接打印它。但是当我打印清单时,我明白了。

ABC
ABC
ABC
ABC
ABC
ABC

现在我知道我在某处犯了一个简单的错误,但我无法弄清楚是什么。我已经尝试过一系列不同的方式,但似乎没有任何工作,我在互联网上找不到任何答案。 Here is the complete code

1 个答案:

答案 0 :(得分:1)

答案已经在您的问题的评论中给出,您遇到的问题是在这一行:

l.Add(list); //add it to the list

您要在“l”列表中的“list”数组中添加引用,而不是对数组进行复制。所以基本上你留下了一个列表,其中包含对同一个对象的引用。

尝试更改此

List<char[]> l;

到这个

List<string> l;

并切换此代码

l.Add(list); //add it to the list

这个

l.Add(new string(list)); //add it to the list

而且我认为你会得到预期的结果。 不同之处在于我们已将数组(即引用类型)转换为字符串(其行为类似于值类型)