VB.net如何从列表中删除已经在数组中的项目

时间:2018-10-16 11:00:39

标签: arrays vb.net list

因此,我正在进行“交易或不交易”,并且我目前正在尝试随机分配什么案件持有多少金额。目前,我的代码创建了值列表,然后随机化了一个选择,然后将其输入到数组中。然后,它将26个值输出到控制台。现在,当从列表中选择一个值并将其输入到数组中时,我希望从列表中删除该值。因此,当循环重复并从列表中选择另一个项目时,它将无法再选择上一个循环中选择的项目。

RemoveAll

我尝试先使用AddressOf,然后再使用 values.RemoveAll(AddressOf cases) 删除重复的值,但这似乎不起作用。

from collections import defaultdict

d = defaultdict(lambda: [])
start_list = [('A99', 2, 3, 'B1'), ('A21', 3, 4, 'B1'), ('A123', 4, 5, 'B2'), ('A22', 3, 6, 'B2'), ('A12', 4, 6, 'B1')]

for elt in start_list:
    d[elt[3]].append(elt[0])

grouped_list = [[k, v] for k, v in d.items()]

2 个答案:

答案 0 :(得分:0)

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

  

删除元素在列表的指定索引处。

像这样:

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列表中。假设您稍后会重用它们。

答案 1 :(得分:0)

有更好的方法:

List(Of Integer)

完成!顺便问一下,如何将0.5存储在IEnumerable(Of Double)中?

编辑:

在我的原始代码中,最终结果将是ToList。我应该在List(Of Double)上添加一个调用,以获得Double,现在已经添加了。

代码使用隐式类型的数组,并且由于其中存在一个Double值,因此该数组被推断为类型Integer。所有Doubles值都隐式转换为List(Of Decimal)。如果您希望使用List(Of Double)而不是0.5,则只需将Double的{​​{1}}更改为{{1}的0.5D }文字。