最近一年多來,一直比較忙,最近一段時間終於空閒了,把以前沒寫的都補上.....
這邊隨筆主要是計算一系列數據的間隔數據。從一堆數據中查詢出每個區間的起始數據,結束數據以及數據個數,同時可以設置相應精度(小數位數)。
區間數據數據結構
1、區間數據主要包括當前區間的起始數據,結束數據以及數據個數。結構如下:
public struct IntervalData<TKey, TValue> { private TKey _startValue; private TKey _endValue; private TValue _count; public IntervalData(TKey startValue, TKey endValue, TValue count) { this._startValue = startValue; this._endValue = endValue; this._count = count; } public TKey StartValue { get { return this._startValue; } set { this._startValue = value; } } public TKey EndValue { get { return this._endValue; } set { this._endValue = value; } } public TValue Count { get { return this._count; } set { this._count = value; } } }
區間數據計算算法
首先需要注意的幾點如下:
1、區間應該大於等於1,精度必須小於等於15(double精度最大值)。
2、區間寬度需要微調,相應需要增加相對應的精度值。
3、最大值和最小值需要微調,相應需要增加或者減少相對應的精度值。
IntervalCount { ; IntervalWidth { ; MaxValue { ; MinValue { ; MAX_DIGIT_SCALE = DataCalculator( (intervalCount <= .IntervalCount = .IntervalCount = IList<IntervalData<, >> Calculate(IList<> values, digits = (values == || values.Count == List<IntervalData<, >> IList<IntervalData<, >> CalculateResult(IEnumerable<> values, dataResult = List<IntervalData<, >> startValue = ( index = ; index < .IntervalCount; index++ count = endValue = Math.Round(startValue + ( currValue (currValue >= startValue &&<++ (index == .IntervalCount - && .MaxValue <.MaxValue = IntervalData<, >= AdjustIntervalWidth( intervalWidth = (.MaxValue - .MinValue) / currentIntervalWidth = (currentIntervalWidth <+= / Math.Pow( (currentIntervalWidth == = .IntervalWidth = AdjustMinAndMaxValue(IEnumerable<> values, minValue = maxValue = currentMinValue = (currentMinValue >-= / Math.Pow( currentMaxValue = (currentMaxValue <=+= / Math.Pow(.MinValue =.MaxValue = CheckDoubleScale( (digits < = (digits >=
具體應用
應用比較簡單,示例如下:
IList<> dataPoints = List<>() { -, , , , , calculator = DataCalculator(<IntervalData<, >> datas = calculator.Calculate(dataPoints, = ( data .Format( result =
輸出結果為:
StartValue:-4 EndValue:16.71 Count:4
StartValue:16.71 EndValue:37.42 Count:0
StartValue:37.42 EndValue:58.13 Count:0
StartValue:58.13 EndValue:78.84 Count:1
StartValue:78.84 EndValue:99.55 Count:1
可以將該返回數據用於相關圖形進行綁定以及顯示。