首页 > 解决方案 > VB.net 如何从列表中删除已经在数组中的项目

问题描述

所以我正在做交易或不交易,我目前正在尝试随机化什么情况下持有多少金额。目前,我的代码创建了值列表,然后随机化一个选择,然后输入到数组中。然后它将 26 个值输出到控制台。现在,当从列表中选择一个值并将其输入到数组中时,我希望将该值从列表中删除。因此,当循环重复并从列表中选择另一个项目时,它不能再选择在前一个循环中选择的项目。

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Dim i As Integer
    Dim values = New List(Of Integer)({0.5, 1, 2, 5, 10, 15, 25, 50, 80, 100, 500, 750, 1000, 2000, 5000, 10000, 25000, 50000, 80000, 100000, 150000, 250000, 500000, 850000, 1000000, 10000000})
    Dim sselect = New Random()
    Dim cases(25) As Integer

    For i = 0 To cases.Length - 1

        cases(i) = sselect.Next(0, values.Count)
        Console.WriteLine(values(cases(i)))
    Next

End Sub

我尝试使用RemoveAll然后AddressOf删除重复值,但它似乎不起作用。

        values.RemoveAll(AddressOf cases)

标签: arraysvb.netlist

解决方案


您可以RemoveAt在选择以下金额时使用:

删除 List 的指定索引处的元素。

像这样:

For i = 0 To cases.Length - 1
    cases(i) = sselect.Next(0, values.Count)
    Console.WriteLine(values(cases(i)))
    values.RemoveAt(cases(i))
Next

使用这种方式将立即从列表中删除使用的值values,这反过来又不允许选择重复的值。

我建议您在迭代之前保留原始列表的副本。一种快速简单的方法是在开始时创建两次列表。

Dim values = New List(Of Integer)({0.5, 1, 2, 5, 10, 15, 25, 50, 80, 100, 500, 750, 1000, 2000, 5000, 10000, 25000, 50000, 80000, 100000, 150000, 250000, 500000, 850000, 1000000, 10000000})
Dim original = New List(Of Integer)({0.5, 1, 2, 5, 10, 15, 25, 50, 80, 100, 500, 750, 1000, 2000, 5000, 10000, 25000, 50000, 80000, 100000, 150000, 250000, 500000, 850000, 1000000, 10000000})

values在从列表中删除所有这些之后。您仍然会将它们列在original列表中。假设您稍后会重用它们。


推荐阅读