我做了一个简单的函数,可以通过排序和比较排序后的值来检查两个单词是否是一个字谜,但是即使这些单词不是字谜,该程序也始终返回true。如果删除.ToString(),它将评估为false。知道为什么要这样做以及如何解决这个问题吗?
public bool anagram(string word1, string word2)
{
char[] word1Arr = word1.ToArray();
char[] word2Arr = word2.ToArray();
Array.Sort(word1Arr);
Array.Sort(word2Arr);
Console.WriteLine(word1Arr);
Console.WriteLine(word2Arr);
if (word1Arr.ToString() == word2Arr.ToString())
{
return true;
}
else
{
return false;
}
}
答案 0 :(得分:8)
替换
if (word1Arr.ToString() == word2Arr.ToString())
使用
if (word1Arr.SequenceEqual(word2Arr))
比较数组的内容-因为word1Arr.ToString()
返回"System.Char[]"
,比较结果存入
"System.Char[]" == "System.Char[]"
始终为真
答案 1 :(得分:2)
您还可以使用此比较:
if(new string(word1Arr) == new string (word2Arr))
ToString
方法在char[]
中具有默认实现,返回类型为System.Char[]
的名称,这就是为什么在比较两个char[]
时得到真假的原因。
与其他答案相比:我的方法创建了string
类的两个额外实例,而另一个答案在不创建额外对象的情况下比较了数组。