反转数组会导致两个数组反转 [英] Reversing an array causes two arrays to be reversed

查看:108
本文介绍了反转数组会导致两个数组反转的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我做了一个简单的程序,它使用一个字符数组来比较一个字符串,看它是否是一个回文,但当我使用Array.Reverse方法来反转第二个数组时,它们最终都会反转。 />


I've made a simple program that uses a character array to compare a string to see if it's a palindrome or not but when I use the Array.Reverse method to reverse the second array both of them end up reversing.

Console.Write("> Enter a word or sentence\n> ");
input = Console.ReadLine();
input = input.Replace(" ","");
charArray = input.ToCharArray();
reversedCharArray = charArray;
Array.Reverse(reversedCharArray);





我通过使用

修复了问题



I've fixed the problem by using

reversedCharArray = charArray.Reverse().ToArray();



但我很好奇为什么它不起作用方式。





我面临的另一个问题是


But I'm curious as to why it didn't work the other way.


The other problem that I'm facing is that

if(charArray == reversedCharArray)



即使阵列相同,也始终返回false(我在输出期间检查了数组的值)我可以看到这样做的另一种方法是输出到一个字符串并比较它们但这似乎是一个不必要的步骤...


Is always returning false even when the arrays are the same (I've checked the values of the arrays during output) The other way I can see to do this is to output to a string and compare them but that seems like an unnecessary step...

推荐答案

查看 reversedCharArray = charArray 的行。您没有通过执行此行来复制数组。你所做的是第二个变量指向与charArray相同的数组实例。您现在有两个指向完全相同的数组实例的变量,charArray和reversedCharArray。你使用一个变量做的事情会被另一个变量反映出来。



至于另一个问题,你不能比较那样的两个数组。您正在比较数组的引用。你所说的是这两个地址是一样的吗?如果你想比较它们而不是迭代遍历数组的内容,逐个元素,你可以将反转的数组转换回字符串,然后比较字符串。



这是一个反转字符串的小函数:

Look at the line that says reversedCharArray = charArray. You did not make a copy of the array by executing this line. What you did was a second variable point to the same array instance as charArray. You now have two variables pointing to the exact same array instance, charArray and reversedCharArray. What you do using one variable will be reflected by the other.

As for the other question, you cannot compare two arrays like that. You're comparing the references of the arrays. What you're saying is "are these two addresses the same?" If you want to compare them without iterating over the contents of the arrays, element by element, you can convert the reversed array back to a string, then compare the strings.

Here's a little function to reverse a string:
Function ReverseString(target As String) As String
    Dim chars() As Char = target.ToCharArray()
    Array.Reverse(chars)
    Return New String(chars)
End Function


您对 reversedCharArray 的分配创建了一个po inter到 charArray 。在下面的示例中,我使用 CopyTo 方法创建 charArray 的副本。





Your assignment to reversedCharArray created a pointer to charArray. In the example below, I used the CopyTo method to create a copy of the charArray.


string input;
char [] charArray;
char [] reversedCharArray;
Console.Write("> Enter a word or sentence\n> ");
input = Console.ReadLine();
input = input.Replace(" ", "");
charArray = input.ToCharArray();
reversedCharArray = new char[charArray.GetLength(0)];
charArray.CopyTo(reversedCharArray,0);
Array.Reverse(reversedCharArray);
Console.WriteLine(charArray);
Console.WriteLine(reversedCharArray);


这篇关于反转数组会导致两个数组反转的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆