Как я могу получить общее количество в если еще условие цикла в vb.net? - PullRequest
0 голосов
/ 03 мая 2019

Я хочу получить общее количество из условия для цикла. Скажем, для первой строки (I) код проверит условие if, если условие соответствует определенному месяцу, затем используйте специальный цикл for, чтобы получить количество столбцов (например: если месяц строки равен 1, то для For k As Integer = 4 применяется dt.Columns.Count - 1, чтобы получить счет, если для месяца в строке 2, то применяется For k As Integer = 4 To dt. .Columns.Count - 2, чтобы получить счет и т. Д.), Затем вторая строка (I) и т. Д., После условия if else k, затем вернуть общее количество, как я могу его достичь?

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

For I As Integer = 0 To dt.Rows.Count - 1
    'If dt.Rows(I).Item("Month").ToString = "1" Or dt.Rows(I).Item("Month").ToString = "3" Or dt.Rows(I).Item("Month").ToString = "5" Or dt.Rows(I).Item("Month").ToString = "7" Or dt.Rows(I).Item("Month").ToString = "8" Or dt.Rows(I).Item("Month").ToString = "10" Or dt.Rows(I).Item("Month").ToString = "12" Then
        For k As Integer = 4 To dt.Columns.Count - 1
            If dt.Rows(I).Item(k).ToString() = "1" Then
                count1 += 1
            Else
                count1 = 0
            End If
               If count1 > 13 Then
                  Dx = True
                 End If
        Next k
    'ElseIf dt.Rows(I).Item("Month").ToString() = "2" Or dt.Rows(I).Item("Month").ToString() = "4" Or dt.Rows(I).Item("Month").ToString() = "6" Or dt.Rows(I).Item("Month").ToString() = "9" Or dt.Rows(I).Item("Month").ToString() = "11" Then
        'For k As Integer = 4 To dt.Columns.Count - 2
            'If dt.Rows(I).Item(k).ToString() = "1" Then
            '   count1 += 1
            'Else
            '   count1 = 0
            'End If
                           ' If total > 13 Then
                '  Dx = True
                  ' End If
        'Next k
    'End If


Next I

DataTable (столбец представляет дату, месяц 11 имеет 30 столбцов, а месяц 12 имеет 31 столбец)

    ----------------------------------------------------------------------------
    Id  | year | month | 1  | 2  | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | till 31
    ----------------------------------------------------------------------------
     kek | 2019 | 10     | 1  | 0  | 0 | 1 | 0 | 0 | 1 | 0 | 0 |  0 | 0  |  0 |  1 | 
     kek | 2019 | 11     | 1  | 0  | 0 | 1 | 0 | 0 | 0 | 0 | 0 |  0 | 1  |  1 |  1 | 
     kek | 2019 | 12     | 1  | 1  | 1 | 1 | 1 | 1 | 1 | 1 | 1 |  1 | 1  |  1 |  0 | 

ссылка

Ожидаемый результат:

если последовательный счет с 11/11 по 12/12 больше 13, то dx возвращает true.

1 Ответ

0 голосов
/ 03 мая 2019

В вашем текущем коде вы сбрасываете count1 в ноль в каждом Else.

Также этот код:

total += count1
If total > 13 Then
    Dx = True
End If

... похоже, это должно быть за пределами цикла.

Мне кажется, вам нужно это:

For I As Integer = 0 To dt.Rows.Count - 1
    Dim offset = 2
    If {"1", "3", "5", "7", "8", "10", "12"}.Contains(dt.Rows(I).Item("Month").ToString())
        offset = 1
    End If
    For k As Integer = 4 To dt.Columns.Count - offset
        If dt.Rows(I).Item(k).ToString() = "1" Then
            count1 += 1
        End If
    Next
Next
If count1 > 13 Then
    Dx = True
End If

Если вы хотите стать поклонником, попробуйте LINQ:

Dim query = _
    From dr In dt.Rows.OfType(Of DataRow)()
    Let offset = If({"1", "3", "5", "7", "8", "10", "12"}.Contains(dr.Item("Month").ToString()), 0, 1)
    From k In Enumerable.Range(4, dt.Columns.Count - offset)
    Where dr.Item(k).ToString() = "1"
    Select 1

Dim total = query.Sum()

If total > 13 Then
    Dx = True
End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...