Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
11/09/17 11:51:37 (6 years ago)
Author:
pfleck
Message:

#2809: Simplified the overall filtering logic as suggested by bburlacu

  • changed parameter names to actively reflect that filter means "remaining"
  • moved filter combination logic to FilterContent
  • simplified/restructured code
Location:
branches/DataPreprocessing Cleanup/HeuristicLab.DataPreprocessing/3.4
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • branches/DataPreprocessing Cleanup/HeuristicLab.DataPreprocessing/3.4/Content/FilterContent.cs

    r15274 r15466  
    2020#endregion
    2121
     22using System.Collections.Generic;
    2223using System.Drawing;
     24using System.Linq;
    2325using HeuristicLab.Common;
    2426using HeuristicLab.Core;
     
    3840    [Storable]
    3941    public bool IsAndCombination { get; set; }
     42
     43    public IEnumerable<IFilter> ActiveFilters {
     44      get { return Filters.Where(f => f.Active && f.ConstraintData != null); }
     45    }
     46
     47    public bool[] GetRemainingRows() {
     48      var remainingRows = new bool[PreprocessingData.Rows];
     49      if (ActiveFilters.Any()) {
     50        var filterResults = ActiveFilters.Select(f => f.Check()).ToList();
     51        var rowFilterResults = new bool[filterResults.Count];
     52        for (int row = 0; row < remainingRows.Length; row++) {
     53          for (int i = 0; i < filterResults.Count; i++)
     54            rowFilterResults[i] = filterResults[i][row];
     55
     56          remainingRows[row] = IsAndCombination
     57            ? rowFilterResults.All(x => x)
     58            : rowFilterResults.Any(x => x);
     59        }
     60      } else {
     61        // if not filters active => all rows are remaining
     62        for (int i = 0; i < remainingRows.Length; i++)
     63          remainingRows[i] = true;
     64      }
     65      return remainingRows;
     66    }
    4067
    4168    #region Constructor, Cloning & Persistence
  • branches/DataPreprocessing Cleanup/HeuristicLab.DataPreprocessing/3.4/Data/FilteredPreprocessingData.cs

    r15431 r15466  
    4343
    4444    #region Constructor, Cloning & Persistence
    45     public FilteredPreprocessingData(IPreprocessingData preporcessingData)
     45    public FilteredPreprocessingData(IPreprocessingData preprocessingData)
    4646      : base() {
    47       originalData = preporcessingData;
     47      originalData = preprocessingData;
    4848      filteredData = null;
    4949    }
     
    317317
    318318    #region Filters
    319     public void SetFilter(bool[] rowFilters) {
     319    public void SetFilter(bool[] remainingRows) {
    320320      filteredData = (IPreprocessingData)originalData.Clone();
    321321      filteredData.InTransaction(() => {
    322         for (int row = (rowFilters.Length - 1); row >= 0; --row) {
    323           if (rowFilters[row]) {
     322        for (int row = (remainingRows.Length - 1); row >= 0; --row) {
     323          if (!remainingRows[row]) {
    324324            filteredData.DeleteRow(row);
    325325          }
  • branches/DataPreprocessing Cleanup/HeuristicLab.DataPreprocessing/3.4/Data/IFilteredPreprocessingData.cs

    r15270 r15466  
    2525  public interface IFilteredPreprocessingData : IPreprocessingData {
    2626    #region Filters
    27     void SetFilter(bool[] rowFilters);
     27    void SetFilter(bool[] remainingRows);
    2828    void PersistFilter();
    2929    void ResetFilter();
  • branches/DataPreprocessing Cleanup/HeuristicLab.DataPreprocessing/3.4/Filter/ComparisonFilter.cs

    r15110 r15466  
    8686    }
    8787
     88    // return remaining rows
    8889    public new bool[] Check() {
    8990      bool[] result = new bool[ConstrainedValue.Rows];
     
    102103        }
    103104
    104         result[row] = !base.Check(item);
     105        result[row] = base.Check(item);
    105106      }
    106107
Note: See TracChangeset for help on using the changeset viewer.