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

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

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. U盘量产大致研究思路

    这几天搞了一波U盘量产,很多年前玩的基本都是些皮毛,比如U盘分区,U盘启动,以及台电U盘的光驱启动等等,这些现在看起来其实都不入眼,只是简单的将U盘分个区,并且没玩到主控上面去. 下面是一些自己的理解 ...

  2. HDU 4436 str2int (后缀自动机SAM,多串建立)

    str2int Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total S ...

  3. C# 对WinForm应用程序的App.config的使用及加密

    原文地址:http://blog.163.com/zhou_zzq/blog/static/1019622120137621739874/   我们在写C#应用程序时,在工程文件中放置一个app.co ...

  4. SQLCE使用

    Windows Phone的本地数据库SQL Server CE是7.1版本即芒果更新的新特性,所以你要在应用程序中使用SQL Server CE数据库必须使用Windows Phone 7.1的AP ...

  5. How To Create A Local Repository For SUSE Linux

    原文地址:http://candon123.blog.51cto.com/704299/1009294/ As you know,you can use the yum command to inst ...

  6. file is universal (4 slices) but does not contain a(n) armv7s slice

    关于ld: file is universal (2 slices) but does not contain a(n) armv7s slice 升级了xcode之后,支持iOS6和iPhone5, ...

  7. css 滚动条样式

    1,Overflow内容溢出时的设置 overflow 水平及垂直方向内容溢出时的设置 overflow-x 水平方向内容溢出时的设置 overflow-y 垂直方向内容溢出时的设置 以上三个属性设置 ...

  8. 【Devops】【docker】【CI/CD】jenkins 清除工作空间报错Error: Wipe Out Workspace blocked by SCM

    jenkins 清除工作空间报错 错误如下: Error: Wipe Out Workspace blocked by SCM 解决方法: 进入jenkins服务器,进入workspace,手动rm ...

  9. Quartz:不要重复造轮子,一款企业级任务调度框架。

    背景 第一次遇到定时执行某些任务的需求时,很多朋友可能设计了一个小类库,这个类图提高了一个接口,然后由调度器调度所有注册的接口类型,我就是其中之一,随着接触的开源项目越来越多,我的某些开发习惯受到了影 ...

  10. JKS和PFX文件相互转换方法

    JKS(JavaKeysotre)格式和PFX(PKCS12)格式,是最常见的SSL证书格式文件,可以包含完整的证书密钥对,证书链和信任证书信息.PFX常用于Windows IIS服务器,JKS常用语 ...