/// <summary> /// 剖析傳入的字串,取出其中的中文字元、使用頻率、以及注音字根(按鍵)。 /// </summary> /// <param name="line"></param> private void ParseLine(string line) { string[] fields = line.Split(sepChars); if (fields.Length < 3) { return; } CharZhuyinInfo charInfo = new CharZhuyinInfo { Character = fields[0] // 中文字元 }; int freq = Convert.ToInt32(fields[1]); // 使用頻率 (0/1/2) if (freq >= m_CharListsByFreq.Length) // 防錯:修正使用頻率. { freq = m_CharListsByFreq.Length - 1; } charInfo.Frequence = (ChineseCharFrequence)freq; for (int i = 2; i < fields.Length; i++) // 注音字根串列 { charInfo.Phonetics.Add(fields[i]); } // 根據使用頻率加入對應的串列. m_CharListsByFreq[freq].Add(charInfo.Character, charInfo); }
/// <summary> /// 尋找指定的漢字。 /// </summary> /// <param name="aChar">字元。</param> /// <param name="freqLimit">限定使用頻率。例如:若傳入 1,則只查詢使用頻率代碼 0~1 的字元(常用字與次常用字)。合法值域是 0~2。</param> /// <returns>傳回該漢字的 CharZhuyinInfo 物件。若找不到則傳回 null。</returns> public CharZhuyinInfo Find(string aChar, ChineseCharFrequence freqLimit) { CharZhuyinInfo charInfo = null; int freqMax = (int)freqLimit; for (int freqIdx = 0; freqIdx < m_CharListsByFreq.Length; freqIdx++) { if (freqIdx > freqMax) { break; } Dictionary <string, CharZhuyinInfo> charList = m_CharListsByFreq[freqIdx]; if (charList.TryGetValue(aChar, out charInfo)) { break; } } return(charInfo); }