给定一个数组,判定该数组中是否有重复元素。

判定该数组中是否有重复元素总结出以下实现方案:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace Demo
{
class Program
{
/**
* 判定一个字符串中是否有重复的元素。
*/
static void Main(string[] args)
{
string[] arr = new string[] { "", "", "", "", "" };
bool isContainsSameItem = IsSameWithForeach(arr);
Console.WriteLine(isContainsSameItem); isContainsSameItem = IsSameWithSortAndCompare(arr);
Console.WriteLine(isContainsSameItem); isContainsSameItem = IsSameWithHashSet(arr);
Console.WriteLine(isContainsSameItem); isContainsSameItem = IsSameWithArrayContains(arr);
Console.WriteLine(isContainsSameItem); Console.ReadKey();
} /**
* 利用array.contains存储及判断是否存在重复数据
* **/
static bool IsSameWithArrayContains(string[] arr)
{
var newArr = new string[arr.Length];
var idx = ;
foreach (var i in arr)
{
if (false == newArr.Contains(i))
{
newArr[idx] = i;
idx++;
}
else
{
return true;
}
}
return false;
} /**
* 利用hasset的原理来实现
* **/
static bool IsSameWithHashSet(string[] arr)
{
ISet<string> set = new HashSet<string>(); for (var i = ; i < arr.Length; i++)
{
// 这里可利用该元素来实现统计重复的原理有哪些,及重复个数。
//bool state = set.Add(arr[i]); // 如果返回false,表示set中已经有该元素。
//Console.WriteLine(state);
set.Add(arr[i]);
} return set.Count != arr.Length;
} /**
*排序后,比较相邻的数据是否有重复的。
*/
static bool IsSameWithSortAndCompare(string[] arr)
{
// 先排序
Array.Sort(arr); //Console.WriteLine(string.Join(",", arr)); // 对比相邻的数据是否相同
for (var i = ; i < arr.Length - ; i++)
{
if (arr[i] == arr[i + ])
return true;
}
return false;
} /**
* 双层遍历
*/
static bool IsSameWithForeach(string[] arr)
{
for (var i = ; i < arr.Length - ; i++)
{
for (var j = i + ; j < arr.Length; j++)
{
if (arr[i] == arr[j])
return true;
}
} return false;
}
}
}

其中我个人觉得是:IsSameWithHashSet(string[] arr)效率最高。

测试性能,测试代码:

             string[] arr = new string[];
// 给arr填充为一个没有任何重复数据的数组来,测试性能。
for (var i = ; i < arr.Length; i++)
{
arr[i] = i.ToString();
} System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();
watch.Start();
bool isContainsSameItem = IsSameWithForeach(arr);
Console.WriteLine(isContainsSameItem);
watch.Stop();
Console.WriteLine("IsSameWithForeach 耗时:" + watch.ElapsedMilliseconds + "milliseconds"); watch = new System.Diagnostics.Stopwatch();
watch.Start();
isContainsSameItem = IsSameWithSortAndCompare(arr);
Console.WriteLine(isContainsSameItem);
watch.Stop();
Console.WriteLine("IsSameWithSortAndCompare 耗时:" + watch.ElapsedMilliseconds + "milliseconds"); watch = new System.Diagnostics.Stopwatch();
watch.Start();
isContainsSameItem = IsSameWithHashSet(arr);
Console.WriteLine(isContainsSameItem);
watch.Stop();
Console.WriteLine("IsSameWithHashSet 耗时:" + watch.ElapsedMilliseconds + "milliseconds"); watch = new System.Diagnostics.Stopwatch();
watch.Start();
isContainsSameItem = IsSameWithArrayContains(arr);
Console.WriteLine(isContainsSameItem);
watch.Stop();
Console.WriteLine("IsSameWithArrayContains 耗时:" + watch.ElapsedMilliseconds + "milliseconds"); Console.ReadKey();

测试效果:

c#:判断一个数组元素中否有重复元素的更多相关文章

  1. C#实现如何判断一个数组中是否有重复的元素

    如何判断一个数组中是否有重复的元素 实现判断数组中是否包含有重复的元素方法 这里用C#代码给出实例 方法一:可以新建一个hashtable利用hashtable的Contains方法进行查找 /// ...

  2. C#实现如何判断一个数组中是否有重复的元素 返回一个数组升序排列后的位置信息--C#程序举例 求生欲很强的数据库 别跟我谈EF抵抗并发,敢问你到底会不会用EntityFramework

    C#实现如何判断一个数组中是否有重复的元素   如何判断一个数组中是否有重复的元素 实现判断数组中是否包含有重复的元素方法 这里用C#代码给出实例 方法一:可以新建一个hashtable利用hasht ...

  3. div里面的元素垂直均匀分布 按钮引发地址栏出现问号 判断一个数组是否为空 div底部居中 路由传参接受参数

    一个固定高度的div的子元素 在垂直 方向上平均分布 .important-dec{ height: 121px; flex-direction: column; display: flex; jus ...

  4. JS判断数组中是否有重复元素的方法

    判断数组中是否有重复元素,最容易想到的方法是使用2重循环,逐个遍历,比较,但是这个是最慢,最笨的方法,百度得出了更好的方法. var ary = new Array("111",& ...

  5. C#中怎么判断一个数组中是否存在某个数组值

    (1) 第一种方法: ,,}; ); // 这里的1就是你要查找的值 ) // 不存在 else // 存在 (2) 第二种方法: string[] strArr = {"a",& ...

  6. PHP如何判断一个数组是一维还是多维

    什么叫多维数组呢?多维数组,本质上是以数组作为数组元素的数组. 二维数组又称为矩阵,一个数组的元素如果是一维数组,那么我们就称这个数组是二维数组. 怎么判断一个数组是否是一维数组呢?通过count() ...

  7. PHP如何判断一个数组是一维数组或者是二维数组?用什么函数?

    如题:如何判断一个数组是一维数组或者是二维数组?用什么函数? 判断数量即可 <?php if (count($array) == count($array, 1)) { echo '是一维数组' ...

  8. delphi 判断一个数组的长度用 Length 还是 SizeOf ?

    判断一个数组的长度用 Length 还是 SizeOf ?最近发现一些代码, 甚至有一些专家代码, 在遍历数组时所用的数组长度竟然是 SizeOf(arr); 这不合适! 如果是一维数组.且元素大小是 ...

  9. JS数组常用函数以及查找数组中是否有重复元素的三种常用方法

    阅读目录: DS01:常用的查找数组中是否有重复元素的三种方法 DS02:常用的JS函数集锦 DS01.常用的查找数组中是否有重复元素的三种方法  1. var ary = new Array(&qu ...

随机推荐

  1. input文字颜色、光标颜色

    <input type="text" placeholder="输入框"> input{ color: red;/*输入文字.光标颜色*/ -web ...

  2. WINUSB Descriptors

    Reading string descriptors: String (0x01): "Travis Robinson" String (0x02): "Benchmar ...

  3. [Go] defer 语句

    Go 还有一些特有的流程控制语句,其中一个就是 defer 语句.该语句用于延迟调用指定的函数,它只能出现在函数的内部,由 defer 关键字以及针对某个函数的调用表达式组成.这里被调用的函数称为 延 ...

  4. MyEclipse使用总结——MyEclipse中配置WebLogic12c服务器

    MyEclipse中配置WebLogic12c服务器的步骤如下: [Window]→[Preferences],如下图所示: 找到WebLogic的配置,如下图所示:

  5. utf-8与utf-8(无BOM)的区别

    BOM——Byte Order Mark,就是字节序标记   在UCS 编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是FEFF.而FFFE ...

  6. 咏南中间件支持TMS WEB CORE客户端

    咏南中间件支持TMS WEB CORE客户端 TMS WEB CORE是优秀的JS前端,搭配咏南中间件后端,可以进行快速的企业应用开发.

  7. Odoo(OpenERP)应用实践:代发货管理

    原文地址:http://blog.csdn.net/wangnan537/article/details/47091857 有些分销商,在买家下单后才向供应商采购产品,并由供应商直接发货给客户.这种模 ...

  8. Informix存储过程

    一.存储过程概述 存储过程是一个用户定义的函数,由存储过程语句(SPL) 和一组SQL语句组成,以可以执行代码形式存储在数据库中,和表.视图.索引等一样,是数据库的一种对象. 存储过程语言SPL(St ...

  9. Java 获取客户端IP

    像移动网关一样,iisforward这个ISAPI过滤器也会对request对象进行再包装,附加一些WLS要用的头信息.这种情况下,直接用request.getRemoteAddr()是无法取到真正的 ...

  10. JQuery日期插件

    JQuery是一款非常优秀的脚本框架,其丰富的控件使用起来也非常简单,配置非常灵活.下面做一个使用日期插件datapicker的例子. 1.下载jQuery核心文件就不用说了吧,datepicker是 ...