昨天在项目中遇到需要进行全文搜索关键字出现次数,并且进行排序,返回排序后的Guid的问题。
问题最终解决,现总结一下:
这里有两个关键点
1:全文搜索,并统计关键字出现的次数。
2:使用排序算法对List<T>进行排序。
最终的解决办法如下:
1.搜索
// 关键字数组
List<string> tmpSL = "此处为关键字转换方法";
// 被搜索字符串
string tmpContent = "";
// 搜索字符串
string tmpKey = "";
// 匹配关键字总数
int total = 0;
// 关键字 支持多个关键字
for (int i = 0; i < tmpSL.Count; i++)
{
tmpKey = tmpSL[i].ToString();
if(
// 进行匹配
for (string tmpStr = tmpContent; tmpStr != null && tmpStr.Length >= tmpKey.Length; )
{
if (tmpStr.IndexOf(tmpKey) == 0)
{
total++;
}
tmpStr = tmpStr.Substring(1);
}
}
2. 对List<T>排序
系统有范型的排序。但都是对一个参数的,在这里要把相对应的Guid也传进去。
最终使用冒泡排序,进行改造。
假如说有类,
Class T
{
private string guid;
public string Guid
{
get { return guid; }
set { guid = value; }
}
private int total;
public int Total
{
get { return total; }
set { total = value; }
}
public T(string Guid, int Total)
{
guid = Guid;
total = Total;
}
}
public void Sort(List<T> tmpList)
{
int i, j;
List<T> temp = new List<T>();
bool done = false;
j = tmpList.Count;
while ((j > 1) && (!done))
{
done = true;
for (i = tmpList.Count - 1; i > tmpList.Count - j; i--)
{
//判断大小
if (tmpList[i].Total > tmpList[i - 1].Total)
{
done = false;
temp.Add(new T(tmpList[i].Guid, tmpList[i].Total));
tmpList[i].Guid = tmpList[i - 1].Guid;
tmpList[i].Total = tmpList[i - 1].Total;
tmpList[i - 1].Guid = temp[0].Guid;
tmpList[i - 1].Total = temp[0].Total;
temp.RemoveAt(0);
}
}
j--;
}
}
以上代码可能并不能直接执行,只需稍加改造即可。