在C#中,要比较两个数组是否完全相同(这两个数组的对应位置都是相同的,不用排序),除了循环每个元素都比较之外,还有其他更好的办法吗。
谢谢
谢谢
解决方案 »
- panel怎么设置边框颜色和样式……
- asp.net入门问题
- 一天时间,问完就在我的另一个页面散分
- Duwamish的安裝程序,給我發一份可以嗎?(馬上結帖)
- C#.net里面,如何利用后台代码,生成一个拆分表头的GridView
- 字符串截取问题,谢谢!
- C# WINFORM设置FORM.STARTPOSITION无效
- 关于时间类型的查询问题,请赐教!
- 在WINFORM中如何实现ComboBox于Hashtable的绑定?
- 请问:为什么我的Visual Studio .NET的帮助文档总是报devexplorer.exe出错,内存只读错误,怎么解决?
- C#将一个字符串good good study day day up 反转
- 菜鸟提问C#中判断对象是某个类的对象问题~
[DllImport("ntdll.dll")]
public static extern int RtlCompareMemory(IntPtr Destination,
IntPtr Source, int Length);private void Form1_Load(object sender, EventArgs e)
{
var a = new int[] { 1, 2, 3, 4, 5, 6 };
var b = new int[] { 1, 2, 3, 4, 5, 6 };
var c = new int[] { 1, 2, 3, 4, 5, 7 };
MessageBox.Show("" + (RtlCompareMemory(Marshal.UnsafeAddrOfPinnedArrayElement(a, 0),
Marshal.UnsafeAddrOfPinnedArrayElement(b, 0), sizeof(int) * a.Length) == sizeof(int) * a.Length)); MessageBox.Show("" + (RtlCompareMemory(Marshal.UnsafeAddrOfPinnedArrayElement(a, 0),
Marshal.UnsafeAddrOfPinnedArrayElement(c, 0), sizeof(int) * a.Length) == sizeof(int) * a.Length));
}
Marshal.UnsafeAddrOfPinnedArrayElement获取数组某个元素的内存地址。
{
public static int Compare(T obj1, T obj2, int n)
{
int size = n;
long l1, l2;
for (int i = 0; i < size / 8; i++)
{
l1 = Marshal.ReadInt64(obj1, i * 8);
l2 = Marshal.ReadInt64(obj2, i * 8);
if (l1 < l2)
return -1;
if (l1 > l2)
return 1;
}
for (int i = size - size % 8; i < size; i++)
{
l1 = Marshal.ReadByte(obj1, i * 8);
l2 = Marshal.ReadByte(obj2, i * 8);
if (l1 < l2)
return -1;
if (l1 > l2)
return 1;
}
return 0;
}
}int[] a = new int[] { 1, 3, 4, 4 };
int[] b = new int[] { 1, 3, 4, 5 };int ret = Comparer<int[]>.Compare(a, b, a.Length * sizeof(int)); //ret为0时表示数组相等