2009-08-13 3 views
0

Как говорится в названии, какой самый эффективный способ получить случайный выбор x DataRows из DataTable.Лучший способ получить случайный выбор из DataTable?

Было бы итеративно делать что-то вроде следующего, пока у меня не будет столько, сколько мне нужно?

protected DataRow SelectRandomRow(DataTable dataTable, Random randomSelector) 
{ 
    return dataTable.Rows[randomSelector.Next(dataTable.Rows.Count)]; 
} 

Должен быть лучший способ ..?

ответ

1

Ваше решение кажется вполне разумным вариантом.

Возможно, вы захотите добавить проверку для повторяющихся строк, поскольку она может возвращать одну и ту же строку несколько раз.

1

Для случайной системы тестирования на наркотики, над которой я работал, я на один шаг вернулся к запросу квалифицированных записей и добавил столбец random() в качестве столбца в результирующем наборе и упорядочен по этому столбцу.

выберите randomFunction(), как RandSequence, otherfields от того стола на 1

Поскольку случайный основан на оригинальной семени, и оно не будет работать в то же самое время, ту же секунду, на основе вероятности и междометие человека, он отлично работал. Я запросил запрос примерно в 50 000 раз против того же «пула» людей - в одной такой группе было более 800 человек, и я сохранил результаты. В любой момент времени человек был только в том же положении всего около 4 раз, но полностью основывался на разнице в десятичной точности.

Затем вы всегда можете взять верхние записи X непосредственно из своего результирующего набора.

2

Надежда мое решение идеально подходит ...........

Dim DT1 As New DataTable 
    DT1.Columns.Add("SN1") 
    DT1.Columns.Add("NAME1") 
    DT1.Rows.Add("1", "Test1") 
    DT1.Rows.Add("2", "Test2") 
    DT1.Rows.Add("3", "Test3") 
    DT1.Rows.Add("4", "Test4") 
    DT1.Rows.Add("5", "Test5") 
    DT1.Rows.Add("6", "Test6") 
    DT1.Rows.Add("7", "Test7") 
    DT1.Rows.Add("8", "Test8") 
    DT1.Rows.Add("9", "Test9") 
    DT1.Rows.Add("10", "Test10") 
    DataGridView1.DataSource = DT1 

    Dim DT2 As New DataTable 
    DT2.Columns.Add("SN1") 
    DT2.Columns.Add("NAME1") 
    Dim I, CNT, J As Integer 
    Dim RS As New Random 

    While DT1.Rows.Count > 0 
     CNT = DT1.Rows.Count - 1 
     Try 
      J = RS.Next(CNT) 
      DT2.Rows.Add(DT1.Rows(J)("SN1"), DT1.Rows(RS.Next(CNT))("NAME1")) 
     Catch ex As Exception 
     End Try 
     DT1.Rows.RemoveAt(J) 
    End While 
    DataGridView2.DataSource = DT2 
End Sub 
Смежные вопросы