zoukankan      html  css  js  c++  java
  • C# 两个数组求相同值

    两个数组:
    string[] str1 = new string[] { "1", "2", "3", "4", "6", "9", "10" };
    string[] str2 = new string[] { "1", "3", "4", "6", "8", "11" };
    求两个数组的相同值
    string[] str3 = new string[]{"1", "3", "4", "6"};
    方法一:一步到位

      string[] str1 = new string[] { "1", "2", "3", "4", "6", "9", "10" };
      string[] str2 = new string[] { "1", "3", "4", "6", "8", "11" };
      string[] str3 = str1.Where(t => str2.Contains(t)).ToArray();

    方法二:以空间换取时间
    1,扫描数组str1,将其值作为key,值为1。如dic.Add(key,1)
    2,扫描数组str2,将其值作为key,与Dictionary的key比较,若key相等,设置dic的值为0
    3,扫描Dictionary,若值为0,则key为str1与str2相等的值。

     1  string[] str1 = new string[] { "1", "2", "3", "4", "6", "9", "10" };
     2             string[] str2 = new string[] { "1", "3", "4", "6", "8", "11" };
     3            
     4             //string[] str3 = str1.Where(t => str2.Contains(t)).ToArray();
     5 
     6             ArrayList array = new ArrayList();
     7             Dictionary<string, int> dic = new Dictionary<string, int>();
     8             for (int i = 0; i < str1.Length; i++)
     9             {
    10                 dic.Add(str1[i], 1);
    11             }
    12             for (int i = 0; i < str2.Length; i++)
    13             {
    14                 if (dic.ContainsKey(str2[i]))
    15                 {
    16                     dic[str2[i]] = 0;
    17                 }
    18             }
    19             foreach (string key in dic.Keys)
    20             {
    21                 if (dic[key] == 0)
    22                 {
    23                     array.Add(key);
    24                 }
    25             }

     方法三,自定义数组
    使用快速排序算法,将两个数组排序,然后进行比较
    具体算法如下

     1  public int[] Fun(int[] a,int[] b)
     2         {
     3             if(a.Length == 0 || b.Length == 0)
     4             {
     5                 return null;
     6             }//两个数组不为空
     7             int aIndex = 0;
     8             int bIndex = 0;
     9             int cIndex = 0;
    10             Sort(a, 0, a.Length - 1);
    11             Sort(b, 0, b.Length - 1);//排序
    12             int[] c = new int[a.Length > b.Length ? a.Length : b.Length];//定义一个新数组
    13             for(; aIndex < a.Length; aIndex++)
    14             {//遍历a数组
    15                 while(bIndex < b.Length && a[aIndex] >= b[bIndex])//查找b数组中的相同项
    16                 {
    17                     if(a[aIndex] == b[bIndex])
    18                     {//有相等
    19                         c[cIndex] = a[aIndex];//插入数组c
    20                         bIndex++;//b索引下标加1
    21                         cIndex++;//c索引下标加1
    22                         break;
    23                     }
    24                     else if(a[aIndex] > b[aIndex])
    25                     {//a>b
    26                         bIndex++;//b索引下标加1,继续while循环
    27                     }
    28                     else//b>a,退出循环,比较a的下一个
    29                     {
    30                         break;
    31                     }
    32 
    33                 }
    34             }
    35             for(int i = 0; i < cIndex; i++)//打印
    36             {
    37                 Console.WriteLine(c[i]);
    38             }
    39             return c;//返回结果
    40         }
    41 
    42         public void Sort(int[] intArray, int nLower, int nUpper)
    43         {
    44             if(nLower < nUpper)
    45             {
    46                 int nSplit = Partition(intArray, nLower, nUpper);
    47                 ///递归排序
    48                 Sort(intArray, nLower, nSplit - 1);
    49                 Sort(intArray, nSplit + 1, nUpper);
    50             }
    51         }
    52 
    53         /// <summary>
    54         /// 方法参数:原始数组、第一个元素位置、最后元素位置
    55         /// 方法功能:完成一趟快速排序
    56         /// </summary>
    57         /// <param name="intArray"></param>
    58         /// <param name="nLower"></param>
    59         /// <param name="nUpper"></param>
    60         /// <returns></returns>
    61         public int Partition(int[] intArray, int nLower, int nUpper)
    62         {
    63             int nLeft = nLower + 1;
    64             ///以数组第一个元素值作为支点
    65             int nPivot = intArray[nLower];
    66             int nRight = nUpper;
    67 
    68             int nSwap;
    69             while(nLeft <= nRight)
    70             {
    71                 ///从左向右寻找大于支点元素
    72                 while(nLeft <= nRight && intArray[nLeft] < nPivot)
    73                     nLeft++;
    74                 ///从右向左寻找小于支点元素
    75                 while(nLeft <= nRight && intArray[nRight] >= nPivot)
    76                     nRight--;
    77                 ///交换nLeft和nRight位置元素值
    78                 if(nLeft < nRight)
    79                 {
    80                     nSwap = intArray[nLeft];
    81                     intArray[nLeft] = intArray[nRight];
    82                     intArray[nRight] = nSwap;
    83                     nLeft++;
    84                     nRight--;
    85                 }
    86             }
    87             ///以intArray[nRight]为新支点 
    88             nSwap = intArray[nLower];
    89             intArray[nLower] = intArray[nRight];
    90             intArray[nRight] = nSwap;
    91             return nRight;
    92         }
  • 相关阅读:
    ABAP开发常见任务
    sap smartform 打印乱码问题
    根据T-Code查看用户出口的代码
    java 调用SAP RFC函数错误信息
    代码单行超过72个字符的一个异常
    SAP 权限层次
    标准屏幕字段描述修改
    [转]SAP一句话入门SD模块
    Python3.7,os模块
    Python3,逻辑运算符
  • 原文地址:https://www.cnblogs.com/cpcpc/p/2853261.html
Copyright © 2011-2022 走看看