通過LinQ查詢字符出現(xiàn)次數(shù)的實(shí)例方法
在一個(gè)項(xiàng)目中使用到一個(gè)問卷調(diào)查,在用戶完成之后,需要統(tǒng)計(jì)所有題目中哪一個(gè)選項(xiàng)被選中次數(shù)最多。
我的實(shí)現(xiàn)方法是將所有題目選中的選項(xiàng)拼接為一個(gè)字符串,如:ABCADAA
在分析被選中次數(shù)的時(shí)候最初是將字符串變?yōu)樽址麛?shù)組,然后進(jìn)行遍歷統(tǒng)計(jì),代碼如下:
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;
}
這樣進(jìn)行統(tǒng)計(jì)效率一般,且感覺有些太復(fù)雜了,于是在后期使用LinQ來進(jìn)行改進(jìn),實(shí)現(xiàn)方法如下:
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());
}
這樣就可以比較簡單的統(tǒng)計(jì)具體出現(xiàn)次數(shù),如果需要對出現(xiàn)最少或者最多的字符進(jìn)行統(tǒng)計(jì),只需要對OrderBy和ToList進(jìn)行修改就可以,比較靈活。
var queryMax = ch.GroupBy(s => s).OrderByDescending(s => s.Count()).SingleOrDefault();
var queryMin = ch.GroupBy(s => s).OrderBy(s => s.Count()).SingleOrDefault();
相關(guān)文章
WinForm自定義函數(shù)FindControl實(shí)現(xiàn)按名稱查找控件
這篇文章主要介紹了WinForm自定義函數(shù)FindControl實(shí)現(xiàn)按名稱查找控件,需要的朋友可以參考下2014-08-08C# 實(shí)現(xiàn)SDL2進(jìn)行視頻播放窗口截圖和字幕添加
這篇文章主要介紹了C# 實(shí)現(xiàn)SDL2進(jìn)行視頻播放窗口截圖和字幕添加,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12Unity實(shí)現(xiàn)毫秒延時(shí)回調(diào)功能
這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)毫秒延時(shí)回調(diào)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09