Dal*_*ons 3 c# string compare string-comparison
我想比较一组字符串并返回相等的部分,直到出现不相等的部分.(并删除traling空格).
例:
List<string> strList = new List<string>
{
"string xyz stop",
"string abc stop",
"string qrt stop"
};
string result = GetEqualName(strList); // This should return "string"
Run Code Online (Sandbox Code Playgroud)
我做了以下方法
string GetEqualName(IEnumerable<string> strList)
{
string outString = "";
bool firstTime = true;
foreach (var subString in strList)
{
if (firstTime)
{
outString = subString;
firstTime = false;
}
else
{
string stringBuilder = "";
for (int i = 0; i < outString.Count(); i++)
{
if (outString[i] == subString[i])
stringBuilder = stringBuilder + outString[i];
else
break;
}
outString = stringBuilder;
}
}
outString = outString.TrimEnd(' '); // Remove traling whitespace
return outString;
}
Run Code Online (Sandbox Code Playgroud)
我觉得这是可以在几行中完成的事情,而且我过度了.你们有什么建议吗?
您可以将Zip两个字符串放在一起,取相同的对,然后创建这些字符的字符串.
public static string LargestCommonPrefix(string first, string second)
{
return new string(first.Zip(second, Tuple.Create)
.TakeWhile(pair => pair.Item1 == pair.Item2)
.Select(pair => pair.Item1)
.ToArray());
}
Run Code Online (Sandbox Code Playgroud)
一旦解决了组合两个字符串的问题,就可以轻松地将其应用于字符串序列:
public static string LargestCommonPrefix(IEnumerable<string> strings)
{
return strings.Aggregate(LargestCommonPrefix);
}
Run Code Online (Sandbox Code Playgroud)