Marc Howard
Marc Howard

Reputation: 425

Choose random object from list, that doesn't exist in second list

I have a two lists: FPTStaticDataManagedStrategyAssetlist & FPTDocManagedStrategyList.

I want to be able to choose a random asset from FPTStaticDataManagedStrategyAssetlist, that doesn't already exist in FPTDocManagedStrategyList to stop duplicates.

This is my code currently

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

but obviously it can include duplicated items. Any Ideas?

Upvotes: 0

Views: 73

Answers (2)

Thomas Levesque
Thomas Levesque

Reputation: 292465

You can use the Except method:

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

You can also avoid materializing the result of Except to a list, by using the method posted by Jon Skeet here.

Upvotes: 2

Robert Fricke
Robert Fricke

Reputation: 3643

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

Upvotes: 1

Related Questions