Exemplo n.º 1
0
        /// <summary>
        /// This method is looking for a subset that contains values that
        /// the outer set does not contain
        /// </summary>
        /// <param name="outerSet"></param>
        /// <param name="space"></param>
        /// <returns></returns>
        public IPossible ReducedSetValues(IEnumerable <TKey> outerSet, ISpace <TKey> space)
        {
            Keys <TKey> oSet = new Keys <TKey>(outerSet);

            oSet.ExceptWith(this);
            IPossible reducedValues = space.AllValuesAt(this);

            // Get all values in subset combination
            foreach (TKey keyInner in this)
            {
                Possible innerValues = new Possible(space[keyInner]);
                foreach (TKey keyOuter in oSet)
                {
                    innerValues.FilterOut(space[keyOuter]);
                }
                // Each innerKey must have an exclusive value not in the outer set
                if (innerValues.Count > 0)
                {
                    reducedValues.IntersectPossible(innerValues);
                }
                else
                {
                    reducedValues.Clear();
                    break;
                }
            }
            return(reducedValues);
        }