Reputation: 1384
I'm working on a game where I want to check if the characters of a string are contained in another string. Obviously a set would be my first choice but I want to account for duplicates. For example:
"met".IsContainedWithin("meet"); => true
"meet".IsContainedWithin("met"); => false
A multi-set would be nice but it sounds like C# doesn't have anything like that. I could just do it iteratively but I was wondering if there was a simpler way (with LINQ perhaps). Thanks!
EDIT:
I wasn't so clear. I want it to return true regardless of the order of the letters:
"git".IsContainedWithin("light")=> true
"pall".IsContainedWithin("lamp")=> false
Upvotes: 0
Views: 556
Reputation: 117084
This works for me:
public static bool IsContainedWithin(this string @this, string container)
{
var lookup = container.ToLookup(c => c);
return @this.ToLookup(c => c).All(c => lookup[c.Key].Count() >= c.Count());
}
I tested it like this:
var tests = new []
{
"met".IsContainedWithin("meet"),
"meet".IsContainedWithin("met"),
"git".IsContainedWithin("light"),
"pall".IsContainedWithin("lamp"),
};
I got these results:
True
False
True
False
Upvotes: 2