2014-11-25 49 views
1

我正试图生成一个虚拟数据来测试我的报告应用程序。到目前为止,我有这个,如何在vb.net中以不同概率在几个值之间进行随机选择?

Dim list As List(Of Object) 
    Dim random As System.Random = New System.Random() 
    For i As Integer = 1 To 100 
     Dim obj As New Object 
     If random.Next(0, 3) > 0 Then 
      obj.Country = "China" 
     Else 
      obj.Country = "Japan" 
     End If 
     ... 
     list.add(obj) 
    Next 

这工作很好。不过,我希望能够随机更多的国家,分别说5(China, Japan, South Korea, North Korea, Taiwan)和概率0.4 : 0.3 : 0.1 : 0.1 : 0.1

我知道我只能扩展上面的If声明,但我真的想要避免混乱的代码,因为目的只是为了生成虚拟数据。

尽管上面的代码可以使用三元运算符进行简化,但是如果我需要在5个值之间随机选择,我该怎么做?除If - Else声明外,是否还有其他选择?

+0

你想用100个条目列表,真的有这个分布,或产生与给定的概率每一个项目? – Wolf 2014-11-25 10:56:18

+0

@狼我只需要用给定的概率生成。我认为下面的答案是足够的 – DnR 2014-11-26 00:43:51

回答

2

URM,我至今认为最简单的办法是:

Dim list As List(Of Object) 
Dim random As System.Random = New System.Random() 
Dim Countries() As String = {"China", "China", "China", "China", _ 
          "Japan", "Japan", "Japan", _ 
          "South Korea", _ 
          "North Korea", _ 
          "Taiwan"} 

For i As Integer = 1 To 100 
    Dim obj As New Object 
    obj.Country = Countries(random.Next(0, 10)) 
    ... 
    list.add(obj) 
Next 
+0

这里的问题是,你必须考虑将概率转换为文字代码... – Wolf 2014-11-25 10:57:57

+0

@Wolf通常数组“Countries()”的值已经处理了概率。 “中国”的机会是4/10,日本(3/10),韩国(1/10),朝鲜(1/10)和台湾(1/0) ' – Baby 2014-11-25 11:29:02

+0

对不起,一个误解:我的意思是,每当你添加一个国家或改变一个概率时,就有很多工作要做。 – Wolf 2014-11-25 11:32:24