如何实现像camelhumps匹配的resharper?
我已经开始了:
注意:这张图片显示的是用空格分隔的单词,但是我写的算法也可以通过在从小写过渡到大写(通过添加空格)时拆分单词来处理驼峰。通过用空格替换它们也可以使用下划线。
到目前为止,我已经使用评级算法来确定匹配的顺序。
但基本上我的仅限于完全匹配,匹配第一个字符或子字符串匹配。
我认为resharper也允许比这更有趣的事情,只是想知道是否有任何已知的有用算法用于这种匹配。
/// <summary>
/// This returns how good of a match something is using camelhumps.
/// 0 = not a match
/// 1 = exact match
/// 2 = exact match no whitespace
/// 3 = camel humps match on first character
/// 4 = substring
/// </summary>
/// <returns></returns>
private int GetMatchRanking( string value, string filter )
{
if ( filter.ToLower() == value.ToLower() ) return 1;
if ( filter.RemoveAllWhitespace().ToLower() == value.RemoveAllWhitespace().ToLower() ) return 2;
// Camel matching on first letters only: touch last changeset ==> tlc
if ( filter.ToLower() == GetFirstLettersForFiltering( value ) ) return 3;
if ( value.ToLower().Contains( filter.ToLower() ) ) return 4;
return 0;
}
// Define other methods and classes here
public List<string> CamelSplit( string s )
{
string text = Regex.Replace( s, @"([a-z])([A-Z])", "$1 $2" );
text = text.Replace( "_", " " ).Trim().ToLower();
return text.Split( " ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries ).ToList();
}
public string GetFirstLetters( List<string> strings )
{
return string.Join( "", strings.Select( s => s.Substring( 0, 1 ) ) );
}
public string GetFirstLettersForFiltering( string s )
{
string letters = GetFirstLetters( CamelSplit( s ) );
if( letters.Length <= 1 || letters.Contains( "<" ) ) return null;
return letters;
}