z401095788
我真不懂NET
采纳率80%
2015-09-10 10:32 阅读 1.7k
已采纳

字符串分割后重复字符出现频率排序

20

图片说明
假设我数据库中只有这一列,然后我读取出来按"|"号分割,然后在去根据分割后字符出现次数排序,比如分割后去重排序应该是"志愿填报|咨询|生涯规划|规划|"。请问有什么方法可以实现吗?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

3条回答 默认 最新

  • 已采纳
    caozhy 从今以后生命中的每一秒都属于我爱的人 2015-09-10 12:14
     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());
    
    点赞 1 评论 复制链接分享
  • z401095788 我真不懂NET 2015-09-10 10:37

    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>");
                    } 
                }
    
    点赞 2 评论 复制链接分享
  • oxcow oxcow 2015-09-10 11:18

    给个思路吧。我是搞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,直到最后一个。 到这一步处理方式就比较多了,可以冒泡,快速等
    
    
    
    点赞 1 评论 复制链接分享

相关推荐