2009-08-13 10 views
0

제목에서 알 수 있듯이 DataTable에서 임의의 x DataRow를 선택하는 가장 효율적인 방법은 무엇입니까?DataTable에서 무작위로 선택하는 가장 좋은 방법은 무엇입니까?

내가 필요한만큼 가질 때까지 반복적으로 다음과 같은 것을 할 수 있습니까?

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

더 좋은 방법이 있어야합니다 ..?

답변

1

당신의 솔루션은 완벽하게 합리적인 선택처럼 보입니다.

그러나 동일한 행을 여러 번 반환 할 수 있으므로 중복 행이 반환되는지 확인하는 것이 좋습니다.

1

무작위 약제 테스트 시스템에서 실제로 검증 된 레코드의 쿼리로 돌아가서 random() 열을 결과 집합의 열로 추가하고 해당 열을 기준으로 정렬했습니다.

선택 randomFunction() RandSequence로서, 랜덤 이후 1

의해 나타난 주문 otherfields는 원래 시드에 기초하여, 그것은 확률에 기초하여, 동일한 시간에, 동일한 제 실행하지 않을 인간의 이목을 집중 시켰을 때, 그것은 훌륭하게 작동했습니다. 저는 사람들과 같은 "풀"에 대해 50,000 번 같은 쿼리를 실행했습니다. 하나의 그룹에는 800 명이 넘는 사람들이 있었고 결과를 저장했습니다. 어떤 주어진 시간에, 사람은 오직 정확히 4 번 같은 위치에 있었지만 10 진 정밀도의 차이에 완전히 기초를 두었습니다.

그런 다음 결과 세트에서 최상위 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 
관련 문제