2014-01-29 45 views
0

我有兩個列表: FPTStaticDataManagedStrategyAssetlist & FPTDocManagedStrategyList。從列表中選擇隨機對象,不存在於第二個列表

我希望能夠從FPTStaticDataManagedStrategyAssetlist中選擇一個隨機資產,它不存在於FPTDocManagedStrategyList中以停止重複。

這是目前我的代碼

FPTStaticDataManagedStrategyAssetlist[random.Next(0, FPTStaticDataManagedStrategyAssetlist.Count())]; 

但顯然它可以包括重複的項目。有任何想法嗎?

+0

你能保證FPTStaticDataManagedStrategyAssetlist中總有一些不在FPTDocManagedStrategyList中的項目嗎?你期望什麼是不在第二個列表中的項目的相對比例?這些問題的答案將決定最佳方法。 –

回答

2

可以使用Except方法:

var temp = FPTStaticDataManagedStrategyAssetlist.Except(FPTDocManagedStrategyList).ToList(); 
if (temp.Count > 0) 
{ 
    var item = temp[random.Next(0, temp.Count)]; 
} 
else 
{ 
    // no items to choose from... 
} 

您也可避免的Except結果物化到一個列表,通過張貼喬恩斯基特here的方法。

+0

你最好在檢索temp之前檢查'temp.Count'是否爲零。 –

+0

@MthetheWWatson,好點 –

1
//Filter away duplicates 
var listTemp = listA.Where(i=> !listB.Contains(i)).ToList(); 
//Select random 
var randomItem = listTemp[random.Next(0, listTemp.Count())]; 
相關問題