C# 实现集合A的任意一个元素都是集合B的元素——子集

1.业务需求

存在一个集合A:{“asd”,“dss”,"254"}和集合B:{“asd”,“dss”,"254","25411"}。判断集合A是否是集合B的子集。

2.业务分析

遍历A集合中的每一个元素,看是否B集合中是否存在该元素。

3.算法设计

问题:集合A是否为集合B的子集?

解决方案:定义两个变量,分别记录集合A的数量、集合A在集合B中的数量。如果两个数量相等,则退出集合A是集合B的子集,反之,集合A不是集合B的子集。

4.界面设计


5.具体实现

(1)定义两个集合:集合A、集合B。存放集合A、B中的数据。

        /// <summary>
        /// 集合A
        /// </summary>
        private string[] subsetA;
        /// <summary>
        /// 集合B
        /// </summary>
        private string[] subsetB;

(2)在提交按钮事件中完成一下三件事:

①获取集合A和集合B的数据。

②在集合A中遍历集合B,并判断集合A是否为集合B的子集。

③如果集合A不是集合B的子集,输出集合A中那些元素不在集合B中。

        private void btnSubset_Click(object sender, EventArgs e)
        {
            string strA = txtSubsetA.Text;
            string strB = txtSubsetB.Text;
            if(txtSubsetA.Text!="")
            {
                subsetA = strA.Split(',');
            }
            else 
            {
                subsetA=null;
            }
            if (txtSubsetB.Text != "")
            {
                subsetB = strB.Split(',');
            }
            else
            {
                subsetB = null;
            }

            if (subsetB != null)
            {
                if (IsSubset(subsetA, subsetB))
                {
                    txtMessage.Text = "";
                    txtMessage.Text = "集合A:" + strA + "是集合B:" + strB + "的子集";
                }
                else
                {
                    string strNotInB = "";
                    string[] strArray = WhichElementInAIsNotInB(subsetA, subsetB);
                    if (strArray != null)
                    {
                        foreach (string item in strArray)
                        {
                            if(item!=null)
                            strNotInB += item + ",";
                        }
                    }
                    txtMessage.Text = "";
                    txtMessage.Text = "集合A:" + strA + "中" + strNotInB + "不在集合B:" + strB + "中";
                }
            }
            else 
            {
                txtMessage.Text = "集合B为空";
            }

        }
        /// <summary>
        /// A是B的子集吗
        /// </summary>
        /// <param name="a">A集合</param>
        /// <param name="b">B集合</param>
        /// <returns>True是FALSE不是</returns>
        public bool IsSubset(string[] a, string[] b)
        {
            int aCount = 0, existCount = 0;  //A集合元素的和     A集合元素存在B集合的个数
            foreach (string elementA in a)
            {
                if (elementA != null)
                {
                    foreach (string elementB in b)
                    {
                        if (elementA == elementB)
                        {
                            existCount++;
                            break;
                        }
                    }
                    aCount++;
                }
                else
                { break; }
            }
            if (aCount == existCount)
            { return true; }
            else
            { return false; }
        }
 /// <summary>
        /// A集合中哪些元素不是B集合的
        /// </summary>
        /// <param name="a">A集合</param>
        /// <param name="b">B集合</param>
        /// <returns></returns>
        public string[] WhichElementInAIsNotInB(string[] a, string[] b)
        {
            string[] result=new string[100];
            int notExistCount=0;
            foreach (string elementA in a)
            {
                bool isExist = false;
                if (elementA != null)
                {
                    foreach (string elementB in b)
                    {
                        if (elementA == elementB)
                        {
                            isExist = true;
                            break;
                        }
                    } 
                }
                else
                { break; }
                if (!isExist)
                {
                    result[notExistCount] = elementA;
                    notExistCount++;
                }
            }
            return result;
        }

6.效果演示


笔者总结

本次知识很简单,但是我发现数学问题经常会以各种各样的形式出现在我们代码编写中,无论是谁,能利用数学思维去解决生活中的实际问题,都是棒棒的,我也相信这是当初我们老师教授我们知识初衷之一吧。







猜你喜欢

转载自blog.csdn.net/YouyoMei/article/details/79992691