• 方法分享:有序集合分段


    1、方法功能描述  

      有序集合:(A、B、C、D、E、F、G、H、I、J),已经有分段(只有首尾):(A,D),(G、H)。

      实现功能:找到其他的分段 (D、G)、(H、J)。

      例如比赛轨道,从A地到J地,中间需要经过B、C、D、E、F、G、H、I、J,把轨道分为几段(只有首尾):(A、D)、(D、G)、(G、H)、(H、J)。现在已经有分段(A、D)、(D、G),怎么找到分段(G、H)、(H、J)?

    2、代码说明及描述

      (1)思想

        循环字符串,逐个与子字符串的第一个字符进行比对,

        如果子字符串列表中不存在,则添加子字符串,并且把子字符串的第一个字符设为该字符串;

        如果子字符串中存在该字符,则取得子字符串的最后一个字符,并且循环跳过该段。

      (2)C#代码

     1        private List<List<string>> FillMidList(List<string> stringList, List<List<string>> midList)
    2 {
    3 List<List<string>> rtn = new List<List<string>>();
    4 List<string> strList = null;//Char List
    5 string start = string.Empty;//Start Char
    6 string end = string.Empty;//End Char
    7 bool isFind = false;
    8 bool isFindEnd = false;//Find End Char
    9
    10 for (int i = 0; i < stringList.Count; i++)
    11 {
    12 start = stringList[i];
    13 //If exit char
    14 foreach (var item in midList)
    15 {
    16 if (start == item[0])
    17 {
    18 if (isFindEnd == true)
    19 {
    20 end = start;
    21 }
    22 isFind = true;
    23 start = item[item.Count - 1];
    24 break;
    25 }
    26 }
    27
    28 if (isFind == true)
    29 {
    30 isFind = false;
    31 //Adjust index
    32 for (int j = 0; j < stringList.Count; j++)
    33 {
    34 if (stringList[j] == start)
    35 {
    36 i = j - 1;
    37 break;
    38 }
    39 }
    40 if (isFindEnd == true)
    41 {
    42 strList.Add(end);
    43 rtn.Add(strList);
    44 isFindEnd = false;
    45 end = string.Empty;
    46 }
    47 }
    48 else
    49 {
    50 if (isFindEnd == true)
    51 {
    52 //Add the last
    53 if (start == stringList[stringList.Count - 1])
    54 {
    55 strList.Add(start);
    56 rtn.Add(strList);
    57 }
    58 }
    59 else
    60 {
    61 strList = new List<string>();
    62 strList.Add(start);
    63 isFindEnd = true;
    64 }
    65 }
    66 }
    67
    68 return rtn;
    69 }

    3、说明

      这个功能在做项目的过程中有时会遇到,个人感觉写的有点繁琐,提供拙见供大家探讨。

  • 相关阅读:
    CentOS 6.5 源码安装subversion-1.8.8,附加mod_dav_svn模块
    MySQL建表设置外键提示错误
    Servlet3.0提供的异步处理
    Servlet3.0使用@WebServlet注解配置问题记录
    我的博客开通啦!
    关于Wii的蓝牙接收
    关于Wii的软件制作
    提升学习算法简述:AdaBoost, GBDT和XGBoost
    决策树中的熵和基尼指数
    机器学习排序算法:RankNet to LambdaRank to LambdaMART
  • 原文地址:https://www.cnblogs.com/sshoub/p/2147114.html
Copyright © 2020-2023  润新知