前段时间做的个小东东里面,需要建立一个字符索引,就是一个字符串,该串里面的每个字符都可以作为索引. 并且这个字符串还要是升序排列.我左看右看,发现string里面也没有sort功能.array倒是有sort功能,那难道我把字符串里面的字符一个个取出来放到一个array里面再sort?我不愿意这么作,就在工具类里面写了两个函数来实现,代码如下,大家参考一下.主要是用二分法来实现位置的查找,然后再在合适的位置插入. namespace Tools.Module { public class Tools { public Tools() { }
public static string GetStrFromStr(string src,int Index) { if(src.IndexOf(",")==0) src = src.Remove(0,1); for(int i=0;i<Index;i++) { src = src.Remove(0,1+src.IndexOf(",")); } if(src.IndexOf(",")<0) return src; else return src.Substring(0,src.IndexOf(",")); } /// <summary> /// 计算出某字符在一个升序排序字符串中应处的位置. /// </summary> /// <param name="src">字符串</param> /// <param name="c">字符</param> /// <returns>该字符应处的位置</returns> public static int GetTheSortedIndex(string str,char c) { int iLength = str.Length; if(iLength == 0) return 0; if(iLength == 1 && str[0] >= c) return 0; else if(iLength == 1 && str[0] < c) return 1;
int index = iLength/2; if(str[index]>c) { return GetTheSortedIndex(str.Substring(0,index),c); } else if(str[index]<c) { return index+1+GetTheSortedIndex(str.Substring(index+1,iLength-index-1),c); } else return index; } /// <summary> /// 把一个字符插入到一个升序排列的字符串中 /// </summary> /// <param name="c">要插入的字符</param> /// <param name="str">目的字符串</param> public static void InsertCharIntoSortedString(char c,ref string str) { if(str==null || str.Length==0 ) { str=c.ToString(); return; }
for(int i=0;i<str.Length;i++) { if(str[i]==c) return; } int index = GetTheSortedIndex(str,c); str = str.Insert(index,c.ToString()); } } }
见笑见笑 
|