我试图找出如何编写一个C#函数,如果有一个"匹配"两个字符串之间。字符串中的数字将始终按asc顺序排序。
string1: 1,3
string2: 1,2,3
如果在string2中找到string1中的所有数字,则该函数应返回true。在上面的示例中,返回值应为true。
string1: 1,2,4
string2: 1,2,3
在上面的示例中,return false应该为false,因为并非string2中的所有数字都在string2中找到。
string1
为空字符串的基本情况应始终返回true,无论string2
包含什么。
我正在考虑将两个字符串拆分成数组并尝试进行匹配,并且还会对正则表达式选项感兴趣。对您可能有的任何想法持开放态度。
我可以处理写这个功能,所以真的只是寻找关于"最佳"实现这一目标的方法。并且通过" best"我的意思是您认为性能最快的选项(是的,我会在进入生产之前在我的硬件上测试性能)。
如果有帮助的话,字符串中最多只有10个数字。我们永远不会看到包含数百个数字的字符串。
答案 0 :(得分:6)
如果格式严格且您不能使用1, "1,2,3", 2
,则可以使用String.Split
和LINQ:
bool allInOneInTwo = !string1.Split(',').Except(string2.Split(',')).Any();
Enumerable.Except
返回两个序列的集合差异,非常有效。因为它在第一场比赛中会延迟Enumerable.Any
执行。
因为您已经提到它必须高效,因为它每天执行多达100k次,并且您希望它最多只需要几秒钟的时间:上面的示例需要它只有140 毫秒在我的电脑上执行100k次。但两个阵列都非常小。 Except
如果它们更大,会产生更大的影响。