数组内容的比较(转载)

环境:数组A 和数组B

int[] ArrayA = new[] {1, 2, 3, 4, 5, 6, 7, 8, 9};
int[] ArrayB = new[] {9, 1, 4, 5, 2, 3, 6, 7, 8};
我们需要比较的是数组的内容,而不是数组的对象引用所以我们不能想当然的用Array.Equals(ArrayA,ArrayB)(结果为false)

现在我们来看看怎样比较数组的内容,当然你可以用循环来比较,在此我们就不谈循环比较的方法了。现在我们看看其他的方法:

方法一:利用泛型方法

static bool ArraysEqual<T>(T[] a1, T[] a2) { if (ReferenceEquals(a1,a2)) return true; if (a1 == null || a2 == null) return false; if (a1.Length != a2.Length) return false; EqualityComparer<T> comparer = EqualityComparer<T>.Default; for (int i = 0; i < a1.Length; i++) { if (!comparer.Equals(a1[i], a2[i])) return false; } return true; } [html] view plaincopyprint?static bool ArraysEqual<T>(T[] a1, T[] a2) { if (ReferenceEquals(a1,a2)) return true; if (a1 == null || a2 == null) return false; if (a1.Length != a2.Length) return false; EqualityComparer<T> comparer = EqualityComparer<T>.Default; for (int i = 0; i < a1.Length; i++) { if (!comparer.Equals(a1[i], a2[i])) return false; } return true; } static bool ArraysEqual<T>(T[] a1, T[] a2)
{
if (ReferenceEquals(a1,a2))
return true;

if (a1 == null || a2 == null)
return false;

if (a1.Length != a2.Length)
return false;

EqualityComparer<T> comparer = EqualityComparer<T>.Default;
for (int i = 0; i < a1.Length; i++)
{
if (!comparer.Equals(a1[i], a2[i])) return false;
}
return true;
}

方法二:Enumerable.SequenceEqual的扩展方法:确定两个序列是否相等的相等比较。(要求3.0以上)具体可以查看msdn:aspx">http://msdn.microsoft.com/en-us/library/bb348567.aspx,当然他的适用范围更广。

bool equals = ArrayA.OrderBy(a
=> a).SequenceEqual(ArrayB.OrderBy(a => a));

方法三:利用Linq方法查询交集的数据比较个数

var q = from a in ArrayA join b in ArrayB on a equals b select a; bool equals1 = ArrayA.Length == ArrayB .Length && q.Count() == ArrayA.Length;
[html] view plaincopyprint?var q = from a in ArrayA join b in ArrayB on a equals b select a; bool equals1 = ArrayA.Length == ArrayB .Length && q.Count() == ArrayA.Length; var q = from a in ArrayA
join b in ArrayB on a equals b
select a;

bool equals1 = ArrayA.Length == ArrayB .Length && q.Count() == ArrayA.Length;

方法四:泛型筛选方法中ALL
var set = new HashSet<byte>(ArrayA);
bool allThere = ArrayB.All(set.Contains);

方法五:利用数学的思想利用交集和并集的思路
bool equals3 = ArrayA.Intersect(ArrayB).Count() ==ArrayA.Union(ArrayB).Count();

时间: 2024-12-27 03:27:06

数组内容的比较(转载)的相关文章

PHP数组内容不重复组合排列算法

最近在做ecshop的商品库存模块,分别给一款商品的多个属性组合设置库存,如下图: 一款手机有不同颜色,屏幕尺寸,系统和电量,都要设置不同的库存,如果都要手动选择属性组合,则会耗费很多不必要的时间.假如打开页面时就已经设置好属性排列组合那就最好不过,因此想了整天,写了如下函数: 1 <?php 2 3 /* 4 Author:GaZeon 5 Date:2016-6-20 6 Function:getArrSet 7 Param:$arrs 二维数组 8 getArrSet(array(arra

交换两个相同大小的数组内容

     对于将两个相同大小的数组内容进行交换的问题,可以给出两个具体的算法,并给出相应的程序如下: 算法一分析:   将两个相同大小的数组内容进行交换,可以先定义两个相同大小的数组a[10]和b[10].同时,创建一个临时变量,借助这个变量,将两个数组的具体内容进行交换.下面是具体的程序: #include <stdio.h> int main() { int a[10]={1,2,3,4,5,6,7,8,9,0}; int b[10]={0,9,8,7,6,5,4,3,2,1}; int

自定义属性,匹配数组内容——JS学习笔记2015-5-26(第39天)

使用自定义属性匹配数组内容 1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <title>匹配数组内容</title> 5 <meta charset="utf-8"> 6 <script> 7 window.onload = function(){ 8 var aBtn=document.getElementsByTagName('input'); 9 var arr =

GridView内容详解(转载)

GridView内容详解(转载) GridView是ASP.NET界面开发中的一个重要的控件,对GridView使用的熟练程度直接影响软件开发的进度及功能的实现.(车延禄)GridView的主要新特性:    1.与DataSource控件结合实现了显示与数据操作的分离,大大减化了代码的编写量;    2.实现"双向绑定",无需手动检索数据.    2.在列的类型上新增了CheckBoxField和ImageField两个类型列;    3.对排序和分页可以实现异步操作;    4.对

导航条 高亮 包含所在列表页和内容页面【转载】

js 高亮显示导航栏代码,通用方式,包括所在内容页 <!--js 高亮显示导航栏代码,通用方式,包括所在内容页--><div id="navmenu">   <ul id="navi">         <li><a href="/">图片首页</a></li>       <li><a href="/qcmn/">清纯

Java生成10个随机数,填充一个数组,用消息框显示数组内容,后求和输出

Java随机生成10个数,填充一个数组,然后用消息框显示数组内容,接着计算数组元素的和,将结果也显示在消息框中. 设计思路: 可以先用Math.Random()*1000生成1000以内随机数,然后依次存入数组中,然后读取数组,输出随机数,同时进行加法计算,最后将所有结果以消 息框形式输出. 程序流程图: 源代码: package 随机数求和; import javax.swing.*; public class Sum { public static void main(String args

JAVA 键盘输入数组,输出数组内容和最大值、最小值

package shuzu; import java.util.Scanner; public class shuzu { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub int[] a = new int[5];  //定义数组 Scanner scanner = new Scanner(System.in); //键盘输入 System.out.p

把一个数组内容动态添加到下拉列表中

<body> //html部分先写一个列表select <select name="" id="sel"></select> //js部分 <script> //数组内容 var data = ["北京","上海","广州"]; //获取select var sel = document.getElementById('sel'); //因为一会要用str来拼

对数组内容使用了json_encode返回汉字内容返回了空值

如果使用json_encode对数组进行转成JSON字符串时候,发现汉字的全部为空,这样可以说明的一点是你的页面上用的一定不是UTF8编码,在PHP手册中对json_encode中待编码的值已经说明所有字符串的编码必须是UTF-8: 所以如果你的页面不是UTF-8编码的话,就需要将你的数组内容转码,具体怎么转码?下面例如你的页面是使用GBK编码的: function Gbk2Utf8($data){ if(is_array($data)){ foreach($data as $key => $v

从两边依次交换数组内容

交换数组内容 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <windows.h>//调用windows自带的函数 int main() { char arr1[] = "welcome to my blog!"; char arr2[] = "###################"; int left = 0; int rig