Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
05/31/17 16:15:08 (7 years ago)
Author:
bburlacu
Message:

#2723: Found a different solution to this issue, by using IList<T> as the return type for the GetValues<T> method.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/DatasetUtil.cs

    r14857 r15013  
    3838    /// <returns>A new list containing shuffled copies of the original value lists.</returns>
    3939    public static List<IList> ShuffleLists(this List<IList> values, IRandom random) {
    40       ValidateInputData(values);
    41 
    4240      int count = values.First().Count;
    4341      int[] indices = Enumerable.Range(0, count).Shuffle(random).ToArray();
     
    4543      for (int col = 0; col < values.Count; col++) {
    4644
    47         if (values[col] is List<double>)
     45        if (values[col] is IList<double>)
    4846          shuffled.Add(new List<double>());
    49         else if (values[col] is List<DateTime>)
     47        else if (values[col] is IList<DateTime>)
    5048          shuffled.Add(new List<DateTime>());
    51         else if (values[col] is List<string>)
     49        else if (values[col] is IList<string>)
    5250          shuffled.Add(new List<string>());
    5351        else
     
    5957      }
    6058      return shuffled;
    61     }
    6259
    63     /// <summary>
    64     /// This method checks if the provided lists of values are actually of the type List<T>, where T is a double, string or DateTime
    65     /// </summary>
    66     /// <param name="values">The values lists</param>
    67     internal static void ValidateInputData(IEnumerable<IList> values) {
    68       if (!values.Any())
    69         throw new InvalidEnumArgumentException("The provided list of values is empty.");
    70 
    71       var errorIndices = new List<int>();
    72       int col = 0;
    73       foreach (var v in values) {
    74         var doubleList = v as List<double>;
    75         var stringList = v as List<string>;
    76         var dateTimeList = v as List<DateTime>;
    77 
    78         var typedCollections = new IList[] { doubleList, stringList, dateTimeList };
    79 
    80         if (typedCollections.All(x => x == null)) {
    81           errorIndices.Add(col); // the values are not a) a list and b) of any of the supported types
    82         }
    83         ++col;
    84       }
    85 
    86       if (errorIndices.Any()) {
    87         var sb = new StringBuilder();
    88         for (int i = 0; i < errorIndices.Count; ++i) {
    89           sb.Append(i);
    90           sb.Append(i < errorIndices.Count - 1 ? ", " : " ");
    91         }
    92         var error = string.Format("Invalid input values. The following columns are not lists of double, string or DateTime values: {0}", sb);
    93         throw new ArgumentException(error);
    94       }
    9560    }
    9661  }
Note: See TracChangeset for help on using the changeset viewer.