• 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[] { "1", "2", "3", "4", "3" };
                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 = 0;
                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 = 0; 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 = 0; i < arr.Length - 1; i++)
                {
                    if (arr[i] == arr[i + 1])
                        return true;
                }
                return false;
            }
    
            /**
             * 双层遍历
             */
            static bool IsSameWithForeach(string[] arr)
            {
                for (var i = 0; i < arr.Length - 1; i++)
                {
                    for (var j = i + 1; j < arr.Length; j++)
                    {
                        if (arr[i] == arr[j])
                            return true;
                    }
                }
    
                return false;
            }
        }
    }

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

    测试性能,测试代码:

     1             string[] arr = new string[100000];
     2             // 给arr填充为一个没有任何重复数据的数组来,测试性能。
     3             for (var i = 0; i < arr.Length; i++)
     4             {
     5                 arr[i] = i.ToString();
     6             }
     7 
     8             System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();
     9             watch.Start();
    10             bool isContainsSameItem = IsSameWithForeach(arr);
    11             Console.WriteLine(isContainsSameItem);
    12             watch.Stop();
    13             Console.WriteLine("IsSameWithForeach 耗时:" + watch.ElapsedMilliseconds + "milliseconds");
    14 
    15             watch = new System.Diagnostics.Stopwatch();
    16             watch.Start();
    17             isContainsSameItem = IsSameWithSortAndCompare(arr);
    18             Console.WriteLine(isContainsSameItem);
    19             watch.Stop();
    20             Console.WriteLine("IsSameWithSortAndCompare 耗时:" + watch.ElapsedMilliseconds + "milliseconds");
    21 
    22             watch = new System.Diagnostics.Stopwatch();
    23             watch.Start();
    24             isContainsSameItem = IsSameWithHashSet(arr);
    25             Console.WriteLine(isContainsSameItem);
    26             watch.Stop();
    27             Console.WriteLine("IsSameWithHashSet 耗时:" + watch.ElapsedMilliseconds + "milliseconds");
    28 
    29             watch = new System.Diagnostics.Stopwatch();
    30             watch.Start();
    31             isContainsSameItem = IsSameWithArrayContains(arr);
    32             Console.WriteLine(isContainsSameItem);
    33             watch.Stop();
    34             Console.WriteLine("IsSameWithArrayContains 耗时:" + watch.ElapsedMilliseconds + "milliseconds");
    35 
    36             Console.ReadKey();

    测试效果:

     

  • 相关阅读:
    【转】五笔字根图
    数据集ds 转化为json
    js 计算 往前(后)几天(月、年)
    js 每秒刷新系统时间,可停止
    如何获取枚举字符串,值及遍历枚举
    js 正则判断值
    C#将时间格式 yyyymmdd hh:mm:ss转换为yyyyMMddHHmmss
    【转】什么是程序集?
    C# 两个日期相减得到月数和天数和时and计算 日期减去月之后的日期
    js判断一个下拉框的选中值是否改变
  • 原文地址:https://www.cnblogs.com/yy3b2007com/p/8858829.html
Copyright © 2020-2023  润新知