假设我数据库中只有这一列,然后我读取出来按"|"号分割,然后在去根据分割后字符出现次数排序,比如分割后去重排序应该是"志愿填报|咨询|生涯规划|规划|"。请问有什么方法可以实现吗?
string s = "";
foreach (DataRow Row in ds.Tables[0].Rows)
s += Row["Tag"].ToString() + "|";
vqr query = s.Split("|").Where(x => x != "")
.GroupBy(x => x)
.OrderByDescending(x => x.Count());
string result = string.Join("|", query.Select(x => x.Key).ToArray());
foreach (DataRow Row in ds.Tables[0].Rows)
{
if (Row["Tag"].ToString() == "")
{
isnull = true;
}
else
{
foreach (var item in Row["Tag"].ToString().Remove(Row["Tag"].ToString().Length - 1, 1).Split('|'))
{
if (!LSTag.Contains(item))
{
LSTag.Add(item);
}
else
{
}
}
}
}
if (!isnull)
{
for (int i = 1; i <= LSTag.Count; i++)
{
sbTag.Append("<li style=\"margin-top:2px;\"><a herf=\"#\" style=\"color:#ffffff;\">").Append(LSTag[i - 1]).Append(" ").Append("</a><span>X</span></li>");
}
}
给个思路吧。我是搞JAVA的.net的话应该差不多。
1、先统计每个单词的个数,使用map存储。key=字符,value=个数(.net可以用direct)
2、然后遍历map,依次输出最大的即可
伪代码:
List<String> tagList = db.select();
List<String> singleTags = new ArrayList<>();
Map<String,Integer> countMap = new HashMap<>();
for(String tag in tagList){ // 遍历查询结果
String [] tags = tag.split["|"]; // 分割字符
for(String t: tags){ // 遍历分割后的字符数组
Integer count = coutMap.get(t); // 获取当前字符的个数
if(count == null ){ // 不存在则新增,记录个数为1
coutMap.put(t,1)
}else{ // 否则个数+1
coutMap.put(t,++count)
}
}
}
//遍历map.
for key,value in countMap:
// 比较value,最大的就输出key,直到最后一个。 到这一步处理方式就比较多了,可以冒泡,快速等