通過LinQ查詢字符出現次數


在一個項目中使用到一個問卷調查,在用戶完成之后,需要統計所有題目中哪一個選項被選中次數最多。

我的實現方法是將所有題目選中的選項拼接為一個字符串,如:ABCADAA

在分析被選中次數的時候最初是將字符串變為字符數組,然后進行遍歷統計,代碼如下:

public static int GetMaxDiaplayChar(string str, out string val)
{
    int times = 0;
    val = "";
    char max = str[0];
    Dictionary<char, int> counter = new Dictionary<char, int>();
    foreach (char c in str)
    {
        if (!char.IsLetter(c)) continue;
        if (counter.ContainsKey(c)) counter[c]++;
        else counter.Add(c, 1);
        if (counter[max] < counter[c]) max = c;
    }
    times = counter[max];
    val = max.ToString();
    return times;
}

這樣進行統計效率一般,且感覺有些太復雜了,於是在后期使用LinQ來進行改進,實現方法如下:

string content = "ABCADAA";
var ch = content.ToCharArray();
var query = ch.GroupBy(s => s).OrderByDescending(s => s.Count()).ToList();
for (int ri = 0; ri < query.Count(); ri++)
{
    MessageBox.Show(query[ri].Key + " = " + query[ri].Count());
}

這樣就可以比較簡單的統計具體出現次數,如果需要對出現最少或者最多的字符進行統計,只需要對OrderBy和ToList進行修改就可以,比較靈活。

var queryMax = ch.GroupBy(s => s).OrderByDescending(s => s.Count()).SingleOrDefault();
var queryMin = ch.GroupBy(s => s).OrderBy(s => s.Count()).SingleOrDefault();

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM