Я не знаю, как вы его вычислить, так как мой опыт с статистическим распределением ограничено, и вы не упомянули, как вы хотите, чтобы вычислить его.
Однако это, по крайней мере компиляции:
Dim stat(2) As Integer
For Each row As DataRow In gridView.Rows
Dim cementDeviation = row.Field(Of Int32)("Cement Deviation")
Select Case cementDeviation
Case 0 To 10
stat(0) += 1
Case 10 To 20
stat(1) += 1
End Select
Next
В общем, нет ничего плохого в петлю DataRows
для расчета значений. Но вы должны установить OPTION STRICT
в on
, тогда ваш код не будет скомпилирован, потому что row("Cement Deviation")
- это объект не целочисленный. Хорошо, что вы вынуждены использовать правильные типы, которые предотвращают неприятные ошибки времени выполнения.
Редактировать Вот пример использования динамических диапазонов и подсчета каждого класса с помощью LINQ. Я использовал DataTable
для хранения минимальных и максимальных значений, но вы также можете использовать другую коллекцию в памяти, такую как List(Of CustomClass)
или даже лучше - базу данных.
Вы также можете просто зацикливать стол, но вы хотели бы видеть другой подход.Мне нравится LINQ, так как это может уменьшить complexitiy и увеличить читаемость:
В таблице диапазон с данными выборки:
Dim rangeTable = New DataTable()
rangeTable.Columns.Add("Min", GetType(Int32))
rangeTable.Columns.Add("Max", GetType(Int32))
For i = 0 To 90 Step 10
rangeTable.Rows.Add(i, i + 10)
Next
Один запрос LINQ для вычисления всех вхождений для каждого диапазона даже упорядоченный по убыванию:
Dim stats =
From rangeRow In rangeTable
Let min = rangeRow.Field(Of Int32)("Min")
Let max = rangeRow.Field(Of Int32)("Max")
Select StatsInfo = New With {
.Min = min, .Max = max,
.Count = (From devRow In devTable
Let cementDeviation = devRow.Field(Of Int32)("Cement Deviation")
Where cementDeviation >= min AndAlso cementDeviation <= max).Count()
}
Order By StatsInfo.Count Descending
Выходной результат:
For Each stat In stats
Console.WriteLine("Min: {0} Max: {1} Count: {2}", stat.Min, stat.Max, stat.Count)
Next
Обратите внимание, что я уже переименовали ваш DataTable
до devTable
с gridView
не является хорошим именем.
Итак, в чем проблема, разве вы не знаете, как получить значение из DataRow или вы не знаете, как рассчитать статистическое распределение? –
Я знаю, как это сделать, но я не знаю, нет ли лучшего способа, чем мой пример. – Rave
Никто не может мне помочь? – Rave