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;
        }
    }
}

特意记录一下,自己写的校验方法。以便以后查看

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你懂的11

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值