2017-06-12 35 views
0

我有以下陣列:服用元素,減去無效值

int[] masterProducts = [1, 2, 3, 4, 5, 6]; 
int[] selectedProducts = [1, 2, 3, 8]; 

我想創建的陣列,只有具有selectedProducts,減去任何無效的產品(例如從上方8是一個無效的產品,因爲它不在masterProducts)。

所以我有2個問題:

  1. 什麼是找出selectedProducts有一個無效的產品最簡單的代碼?我可以做一些/循環,但似乎效率低下。
  2. 什麼是C#中最簡單的方法是隻取selectedProducts,減去任何無效的產品(在這種情況下減去8)?

回答

4

什麼是找出selectedProducts有 無效的產品最簡單的代碼?我可以做一些/循環,但似乎 效率低下。

使用LINQ Except方法可以很容易地處理兩個序列的差異。請注意,性能也將是不錯的,因爲它是一組操作(使用散列內部設定):

bool hasInvalidProduct = selectedProducts.Except(masterProducts).Any(); 

什麼是C#最簡單的方法只需要selectedProducts,減去 任何無效的產品(減在這種情況下是8號)?

它也很容易 - 您可以使用Intersect運營商產生兩個序列的交集:

var validProducts = selectedProducts.Intersect(masterProducts); 

這一套操作過了,它也使用哈希內部設置快速查找,如果來自第一序列的項目存在於從第二序列項目 - O(1)操作創建的散列集合中。

+0

@Targaryen'Except','Any'和'Intersect'是'System.Linq'命名空間的擴展方法。所有這些方法都是任何可枚舉數據類型的擴展 - 整數列表和數組都可以。確保你在文件的頂部有適當的'使用' –