我是C#.net开发人员。 我想检查源字符串是否包含目标字符串中的所有字符。 例如:
Source String : Test Check
Destination sting : Check Test
然后想检查目标字符串中是否存在每个字符(T,e,s,t,c,h,e,c,k)? 源字符串可以包含数字/字母数字/特殊字符,以与目标字符串进行比较。
我们可以通过循环验证每个&来自目的地的每个角色并将其与目的地相匹配,但这需要时间。
有没有简单的方法来检查这个?
答案 0 :(得分:3)
您可以使用linq All
方法
string source = "Test Check";
string destination = "Check Test;
bool result = source.All(a => destination.Contains(a));
正如@GrantWinney所说,这个解决方案不会考虑字母出现次数
答案 1 :(得分:2)
您可以使用Except
+ Any
:
string sourceString ="Test Check";
string destString ="Check Test";
bool destStringContainsSource = !sourceString.Except(destString).Any();
HashSet<char> set = new HashSet<char>(sourceString);
destStringContainsSource = set.SetEquals(destString);
这两种方法都不考虑字符数。
Except
- 方法甚至不检查目标字符串是否包含更多字符。它只是检查第二个字符串是否是第一个字符串的子集。 SetEquals
并不完全相同。
您可以使用HashSet.IsSubsetOf
来获得相同的行为:
HashSet<char> set = new HashSet<char>(sourceString);
bool sourceIsSubsetOfDest = set.IsSubsetOf(destString);
我更喜欢HashSet
方法,因为它们非常有效,而且最清楚。