C#判斷兩個集合數據組合情況

功能簡述,
希望可設置必現關鍵詞,
及可選關鍵詞來自由組合。
比如設置“天氣”爲必現詞,“晴”,“陰”爲可選關鍵詞。當程序識別出
“天氣+晴”或“天氣+陰”或“天氣+晴+陰”,程序運行通過;如只出現“晴”,
或只出現“陰”或”出現“晴+陰”,則返回識別失敗;
在改之前是根據關鍵詞的數量來判斷是否通過的
這個例子是增加之前驗證用的,保留一下。
 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ListStrTest
{
    class Program
    {
        //功能簡述,
        //希望可設置必現關鍵詞,
        //及可選關鍵詞來自由組合。
        //比如設置“天氣”爲必現詞,“晴”,“陰”爲可選關鍵詞。當程序識別出
        //“天氣+晴”或“天氣+陰”或“天氣+晴+陰”,程序運行通過;如只出現“晴”,
        //或只出現“陰”或”出現“晴+陰”,則返回識別失敗;
        //在改之前是根據關鍵詞的數量來判斷是否通過的
        //這個例子是增加之前驗證用的,保留一下。
        /*
         解決思路:用兩個List<string>數組來保存必須關鍵字和可選關鍵字,因爲這都是界面設置,可以得到的內容。
         然後就是判斷邏輯處理,
         第一種情況:果可選關鍵字爲空,那麼必須關鍵字裏的每一項都出現纔會通過。
         第二種:如果有可選關鍵字,那麼只要可選和必須組合有一種出現,即通過。
             */
        static void Main(string[] args)
        {
            string keyAnds = "你,我,他,和";
            string keyOrs = "喫飯,睡覺";
            string[] keyAndstrs = keyAnds.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);//必須關鍵字
            List<string> keyAndList = new List<string>(keyAndstrs);

            string[] keyOrstrs = keyOrs.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);//可選關鍵字
            List<string> keyOrList = new List<string>(keyOrstrs);

            string ret = "今天你氣預2w我報是喫cc飯特多他雲";

            Console.WriteLine(CheckKeys(ret, keyAndList, keyOrList));
            Console.ReadKey();
        }
        /// <summary>
        /// 校驗關鍵字是否存在
        /// </summary>
        /// <param name="ret">需要驗證的文字</param>
        /// <param name="keyAndList">必須關鍵字列表</param>
        /// <param name="keyOrList">可選關鍵字列表</param>
        /// <returns></returns>
        private static bool CheckKeys(string ret, List<string> keyAndList, List<string> keyOrList)
        {
            int count = 0;//定義標誌
            bool flag = false;//定義標誌
            if (keyOrList.Count == 0)//這是可選爲空的邏輯
            {
                foreach (var item in keyAndList)//遍歷必須字。。。
                {
                    if (ret.Contains(item))//和文本對比每一項。包含就加1.
                    {
                        count++;
                    }
                }
                if (keyAndList.Count != count)//如果不滿足全部情況,返回識別失敗
                {
                    return false;
                }
                else
                {
                    return true;
                }
            }
            else
            {
                for (int i = 0; i < keyOrList.Count; i++)//有可選的情況
                {
                    for (int j = 0; j < keyAndList.Count; j++)
                    {
                        if (ret.Contains(keyAndList[j]) && ret.Contains(keyOrList[i]))//出現任意組合就通過
                        {
                            flag = true;
                        }
                    }
                }
            }
            return flag;
        }
    }
}

特意記錄一下,自己寫的校驗方法。以便以後查看

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章