ASP.Net получить столбцы со значениями, добавить их, а затем разделить - PullRequest
1 голос
/ 14 февраля 2011

У меня есть какой-то код, который работает так, как должен, но кажется, что это немного круто, и я подумал, есть ли у кого-нибудь идеи, как его привести в порядок

Вотмой код

Dim TotalNumber As Double

    Dim NumberFilled As String

    NumberFilled = Nothing

    For x = 0 To drCode2a.Tables(0).Columns.Count - 1

        If Not drCode2a.Tables(0).Rows(0)(x).ToString() = "0" Then

            NumberFilled += drCode2a.Tables(0).Rows(0)(x).ToString() & "-"

            TotalNumber = TotalNumber + drCode2a.Tables(0).Rows(0)(x).ToString()

        End If
    Next

    Dim delimiters As Char() = New Char() {"-"c}

    Dim TotalNumberFilled As String() = NumberFilled.Split(delimiters, StringSplitOptions.RemoveEmptyEntries)

    Dim AverageRating As Double = TotalNumber / TotalNumberFilled.Length

Response.Write(NumberFilled & "<br/>" & TotalNumber & "<br/>" & AverageRating)

В основном для моего примера NumberFilled = "1-2-" и TotalNumber = 3 и AverageRating = 1.5

Это показывает, что 2 столбца были заполнены, и их общее значение равно 3, поэтому среднее значение= 1.5

Как я уже сказал, это работает так, как должно, но я бы хотел привести в порядок, если это возможно

Спасибо

Ответы [ 2 ]

2 голосов
/ 14 февраля 2011
Dim totalNumber as Double = 0
Dim count as Integer = 0

For x = 0 To drCode2a.Tables(0).Columns.Count - 1
  Dim current as Double = 0
  If Double.TryParse(drCode2a.Tables(0).Rows(0)(x).ToString(), current) AndAlso current <> 0 Then
    count += 1
    totalNumber += current
  End If
Next

Dim averageRating as Double = totalNumber / count
1 голос
/ 14 февраля 2011

Вот альтернатива.Я не знаю, что это обязательно лучше, но он действительно использует объект StringBuilder, который немного быстрее строк и сохраняет общие значения как двойные, а не выполняет двойное преобразование в двойное.

Dim NumberFilled As New StringBuilder("")
Dim TotalNumber as Double
Dim ColumnsFilled as Integer = 0

For each column as DataColumn in drCode2a.Tables(0).Columns
    Dim value = drCode2a.Tables(0).Rows(0)(column.ColumnName).ToString()
    If Not "0".Equals(value, StringComparison.OrdinalIgnoreCase) Then

        If NumberFilled.Length > 0 Then NumberFilled.Append("-")
        NumberFilled.Append(value)
        TotalNumber = Convert.ToDouble(value)
        ColumnsFilled += 1

    End If
Next
...