2011-12-23 51 views
0

Find common values in multiple arrays with PHP查找多個陣列共同的價值觀,或者列出VB.NET

差不多做什麼,我需要的,但在PHP,我需要VB。

我的情況是我想創建一個基於多個庫存位置的智能選股系統。

在發票點,我們循環通過發票項目並檢查庫存數據庫中的可用庫存。

如果發票上的所有項目均現貨供應位置1挑,那麼都應該從庫存位置1 ...等

如果所有的大多數項目都有現貨位置1,除了一個或回升兩個,然後從庫存地點1挑選所有庫存,但應從具有最高可用庫存的地點挑選的例外除外。

找到最高可用庫存很簡單,但我不能解決如何從多個位置分析庫存可用性並找到普通庫存位置。

如何我比較這些位置清單發現2是共同的所有四個我可以創建這樣

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

一組陣列?其次,如果一個項目沒有普通的庫存位置,我將如何識別該項目,以便我可以返回併爲其找到最高的可用庫存水平?

回答

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)

+0

注:就像我所有的VB代碼示例,這一個假設'顯式的選項/嚴格/推斷On'。 – Heinzi 2011-12-23 16:26:21

+0

看起來不錯,但我得到的錯誤,大概是因爲我使用.NET 2.0框架? '相交不是system.array的成員' – 2011-12-23 16:29:08

+1

@JamieHartnoll Intersect是一個LINQ擴展。你需要.NET 3.5或更高版本才能使用它。 – JamieSee 2011-12-23 16:32:00

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 
+0

算法看起來不錯,但爲什麼不使用'List(Of Integer)'?如果需要數組,則可以在完成時通過調用arrCommon = listCommon.ToArray()來創建一個數組。 – 2011-12-23 18:13:32

+0

我更喜歡泛型列表,但決定只使用數組來實現此示例,因爲這是問題中提到的。另外,我的頭腦裏並沒有正式的說泛型被包含在2.0中。儘管如此,您還是會提出一個有效的問題,因爲可以使用List(of Integer)類型來避免ReDim語句和If Then塊之一。 – N0Alias 2011-12-23 18:26:16

+0

我認爲我現在被禁止從電腦工作到現在的聖誕節,但這看起來不錯,除了一個缺陷之外,似乎我需要知道在寫代碼之前我有多少個庫存位置。我試圖讓這個系統也是可擴展的,所以如果地點被添加/刪除,需要它是靈活的。 – 2011-12-23 22:22:57