在多个数组中查找公共值,或列出VB.NET

时间:2011-12-23 16:20:18

标签: .net vb.net arrays

Find common values in multiple arrays with PHP

几乎可以满足我的需求,但在PHP中,我需要VB。

我的情况是我正在尝试基于多个库存位置创建智能选股系统。

在开发票时,我们循环开发项目并检查库存数据库中的可用库存。

如果发票上的所有商品都可以从库存地点1中挑选,那么所有商品都应该从库存地点1 ......等中挑选。

如果除了一个或两个以外的库存地点1中的所有大多数商品都可用,则从库存地点1中挑选所有库存,但应从可用库存最高的地点挑选的例外情况除外。

寻找最高可用库存很简单,但我无法弄清楚如何从多个地点分析库存可用性并找到普通库存位置。

我可以像这样创建一组数组

Item ID    |     Available Stock Locations
    1      |        2, 3, 5
    2      |        1, 2, 6
    3      |        2, 3, 4
    4      |        1, 2 ,3 

如何比较这些位置列表,发现2对所有四个都是通用的?

其次,如果一个物品没有共同的库存地点,我如何识别该物品,以便我可以返回并找到最高库存水平?

2 个答案:

答案 0 :(得分:0)

与在PHP中一样,您可以交叉数组来查找公共值。感谢LINQ,这在VB中相当容易:

Dim array1 = {2, 3, 5}
Dim array2 = {1, 2, 6}
Dim array3 = {2, 3, 4}
Dim array4 = {1, 2, 3}

Dim commonItems = array1.Intersect(array2).Intersect(array3).Intersect(array4)

commonItems现在是IEnumerable(Of Integer),其中包含所有常见的商店位置。

答案 1 :(得分:0)

Linq会更干净,但这种方法适用于2.0 ......

Dim arrX(2) As Integer
arrX(0) = 0
arrX(1) = 1
arrX(2) = 2

Dim arrY(2) As Integer
arrY(0) = 0
arrY(1) = 32
arrY(2) = 2

Dim arrZ(2) As Integer
arrZ(0) = 10
arrZ(1) = 2
arrZ(2) = 22

Dim arrCommon() As Integer

For Each i As Integer In arrX

    For Each i2 As Integer In arrY

        If i = i2 Then

            For Each i3 As Integer In arrZ

                If i2 = i3 Then

                    If arrCommon Is Nothing OrElse arrCommon.Length = 0 Then

                        ReDim arrCommon(0)
                        arrCommon(0) = i

                    Else

                        ReDim Preserve arrCommon(arrCommon.Length)

                        arrCommon(arrCommon.Length - 1) = i

                    End If

                End If

            Next

        End If

    Next

Next