c#:判断一个数组元素中否有重复元素
给定一个数组,判定该数组中是否有重复元素。
判定该数组中是否有重复元素总结出以下实现方案:
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#:判断一个数组元素中否有重复元素的更多相关文章
- C#实现如何判断一个数组中是否有重复的元素
如何判断一个数组中是否有重复的元素 实现判断数组中是否包含有重复的元素方法 这里用C#代码给出实例 方法一:可以新建一个hashtable利用hashtable的Contains方法进行查找 /// ...
- C#实现如何判断一个数组中是否有重复的元素 返回一个数组升序排列后的位置信息--C#程序举例 求生欲很强的数据库 别跟我谈EF抵抗并发,敢问你到底会不会用EntityFramework
C#实现如何判断一个数组中是否有重复的元素 如何判断一个数组中是否有重复的元素 实现判断数组中是否包含有重复的元素方法 这里用C#代码给出实例 方法一:可以新建一个hashtable利用hasht ...
- div里面的元素垂直均匀分布 按钮引发地址栏出现问号 判断一个数组是否为空 div底部居中 路由传参接受参数
一个固定高度的div的子元素 在垂直 方向上平均分布 .important-dec{ height: 121px; flex-direction: column; display: flex; jus ...
- JS判断数组中是否有重复元素的方法
判断数组中是否有重复元素,最容易想到的方法是使用2重循环,逐个遍历,比较,但是这个是最慢,最笨的方法,百度得出了更好的方法. var ary = new Array("111",& ...
- C#中怎么判断一个数组中是否存在某个数组值
(1) 第一种方法: ,,}; ); // 这里的1就是你要查找的值 ) // 不存在 else // 存在 (2) 第二种方法: string[] strArr = {"a",& ...
- PHP如何判断一个数组是一维还是多维
什么叫多维数组呢?多维数组,本质上是以数组作为数组元素的数组. 二维数组又称为矩阵,一个数组的元素如果是一维数组,那么我们就称这个数组是二维数组. 怎么判断一个数组是否是一维数组呢?通过count() ...
- PHP如何判断一个数组是一维数组或者是二维数组?用什么函数?
如题:如何判断一个数组是一维数组或者是二维数组?用什么函数? 判断数量即可 <?php if (count($array) == count($array, 1)) { echo '是一维数组' ...
- delphi 判断一个数组的长度用 Length 还是 SizeOf ?
判断一个数组的长度用 Length 还是 SizeOf ?最近发现一些代码, 甚至有一些专家代码, 在遍历数组时所用的数组长度竟然是 SizeOf(arr); 这不合适! 如果是一维数组.且元素大小是 ...
- JS数组常用函数以及查找数组中是否有重复元素的三种常用方法
阅读目录: DS01:常用的查找数组中是否有重复元素的三种方法 DS02:常用的JS函数集锦 DS01.常用的查找数组中是否有重复元素的三种方法 1. var ary = new Array(&qu ...
随机推荐
- 使用CefSharp在.Net程序中嵌入Chrome浏览器(七)——右键菜单
一个常用的功能就是禁止浏览器本身的右键菜单,靠在WPF中拦截鼠标事件是不行的,可以通过设置MenuHandler来实现. 首先实现一个IContextMenuHandler. public class ...
- 78-WS2812-Library (STM32F4)
78-WS2812-Library (STM32F4) //-------------------------------------------------------------- // File ...
- MFC之菜单
1菜单与菜单项的操作 //获取菜单指针----CWnd::GetMenu() //GetSubMenu()获取子菜单 /CheckMenuItem()加入/取消标记 GetMenu()->Get ...
- Revit API创建详图视图
start //创建详图视图 Transaction ts = new Transaction(doc, "http://greatverve.cnblogs.com"); ts. ...
- Revit API创建一个拷贝房间内对象布局命令
本课程演示创建一个拷贝房间内对象布局命令,完整演示步骤和代码.这个命令把选中房间内的对象复制到其它选中的一个或多个房间中,而且保持与源房间一致的相对位置.通过本讲座使听众知道创建一个二次开发程序很简单 ...
- bat如何批量删除指定部分文件夹名的文件夹
@echo offfor /f "delims=" %%i in ('dir /s/b/ad 123*') do ( rd /s/q "%%~i")exit
- MyEclipse10安装Log4E插件
一. Log4E插件下载 下载地址:http://log4e.jayefem.de/content/view/3/2/ 二.安装Log4E插件 将下载下来的压缩包解压缩,如下图所示: 解压缩生成的[d ...
- npm WARN saveError ENOENT: no such file or directory
转自树之名原文npm WARN saveError ENOENT: no such file or directory解决 我是在安装sequelize时出错的.提示的错误没有保存,类似于参考的文章中 ...
- C++关键字之virtual
from://http://blog.csdn.net/xuyuanfan/article/details/9935533 在C++中是没有接口的,要真正实现java中的interface功能,需要使 ...
- Convolutional Neural Networks at Constrained Time Cost(精读)
一.文献名字和作者 Convolutional Neural Networks at Constrained Time Cost,CVPR 2015 二.阅读时间 2015年6月30 ...