Esempio n. 1
0
        private void SolveNakedSubset()
        {
            foreach (FieldContainer fieldContainer in fieldContainers)
            {
                for (int i = 2; i < 9; i++)
                {
                    var fieldTuple = fieldContainer.GetFields().Where(field => field.CountPossibleValues() == i);



                    if (fieldTuple.Count() >= i)
                    {
                        Dictionary <string, List <Field> > fieldGrouping = new Dictionary <string, List <Field> >();
                        List <Field> fieldsWithEqualPossible             = null;
                        foreach (Field field in fieldTuple)
                        {
                            if (fieldGrouping.TryGetValue(field.PossibleValuesToString(), out fieldsWithEqualPossible))
                            {
                                fieldsWithEqualPossible.Add(field);
                            }
                            else
                            {
                                List <Field> newFieldGroup = new List <Field>();
                                newFieldGroup.Add(field);
                                fieldGrouping.Add(field.PossibleValuesToString(), newFieldGroup);
                            }
                        }
                        // mit Linq aus fieldGrouping diejenigen selektieren, welche i Einträge haben
                        var searchResult = fieldGrouping.Values.Where(group => group.Count == i);
                        if (searchResult.Count() > 0)
                        {
                            HashSet <Field> containerFieldsHS = new System.Collections.Generic.HashSet <Field>(fieldContainer.GetFields());
                            containerFieldsHS.ExceptWith(searchResult.First());
                            foreach (Field field in containerFieldsHS)
                            {
                                field.RemovePossibleValues(searchResult.First().First().GetPossibleValues());
                            }
                        }
                    }
                }
            }
        }