Пример #1
0
        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);
        }
Пример #2
0
        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());
        }