我如何实现像camelhumps匹配的resharper?

时间:2016-10-09 17:56:48

标签: c#

如何实现像camelhumps匹配的resharper?

我已经开始了:

注意:这张图片显示的是用空格分隔的单词,但是我写的算法也可以通过在从小写过渡到大写(通过添加空格)时拆分单词来处理驼峰。通过用空格替换它们也可以使用下划线。

enter image description here

到目前为止,我已经使用评级算法来确定匹配的顺序。

但基本上我的仅限于完全匹配,匹配第一个字符或子字符串匹配。

我认为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;
   }

0 个答案:

没有答案