public static RangeIndexes[] GetRangesForArrOfLen(int dataLen, double discretization, RangeHz[] ranges) { RangeHz[] _ranges = CollapseRangesHzIntersections(ranges); RangeIndexes[] data_ranges = new RangeIndexes[_ranges.Length]; for (int i = 0; i < _ranges.Length; i++) { data_ranges[i] = GetDataIndexesRange(dataLen, discretization, _ranges[i]); } data_ranges = CollapseRangesIndexesIntersections(data_ranges); return(data_ranges); }
public static RangeIndexes[] CollapseRangesIndexesIntersections(RangeIndexes[] ranges) { List <RangeIndexes> rngs = new List <RangeIndexes>(ranges); rngs.Sort((r1, r2) => { return(r1.Min.CompareTo(r2.Min)); }); rngs = rngs.FindAll((r) => { return(r.Min != r.Max); }); int start = rngs.Count > 0 ? rngs[0].Min : 0; int end = rngs.Count > 0 ? rngs[0].Max : 0; List <RangeIndexes> results = new List <RangeIndexes>(); for (int i = 0; i < rngs.Count; i++) { RangeIndexes r = rngs[i]; if (r.Min > end) { results.Add(new RangeIndexes(start, end)); start = r.Min; end = r.Max; } else { end = Math.Max(end, r.Max); } } if (rngs.Count > 0) { results.Add(new RangeIndexes(start, end)); } return(results.ToArray()); }