Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        /// <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);
        }