【问题标题】:Reverse a string and get an error反转字符串并得到错误
【发布时间】:2012-08-14 17:24:26
【问题描述】:

错误是

'string.String(char[])' 的最佳重载方法匹配有一些无效参数

我的代码:

string reverseValue = new string(
                      value.Select((c, index) => new { c, index })
                      .OrderByDescending(x => x.index).ToArray());

【问题讨论】:

标签: c# linq


【解决方案1】:
char[] chars = value.ToCharArray();
Array.Reverse(chars);
new String(chars);

或者(有点慢)

new String(value.Reverse().ToArray());

请注意,这不会处理 UTF32 代理对,也不会组合字符。

【讨论】:

    【解决方案2】:

    你忘记选择字符了:

    string reverseValue = new string(
        value.Select((c, index) => new { c, index })
        .OrderByDescending(x => x.index)
        .Select(x => x.c)
        .ToArray()
    ); 
    

    还要注意,这是一种非常低效的反转字符串的方法。您可以使用 Array.Reverse 或者如果您真的关心性能:

    public static string Reverse(string input)
    {
        var length = input.Length;
        var last = length - 1;
        var chars = input.ToCharArray();
        for (int i = 0; i < length / 2; i++)
        {
            var c = chars[i];
            chars[i] = chars[last - i];
            chars[last - i] = c;
        }
        return new string(chars);
    }
    

    【讨论】:

      【解决方案3】:

      您正在选择一个新对象,而不是字符。试试这个:

      string reverseValue = new string( 
                                  value.Select((c, idx) => new { 
                                                             charVal = c,  
                                                             index = idx 
                                                           })
                                       .OrderByDescending(x => x.index)
                                       .Select(x => x.charVal)
                                       .ToArray());
      

      假设这不仅仅是学术性的,我可以建议:

      /// <summary>
      /// Reverses a string
      /// </summary>
      public static string ReverseString(this string s)
      {
          char[] arr = s.ToCharArray();
          Array.Reverse(arr);
          return new string(arr);
      }
      

      用法:

      string reverseValue = value.ReverseString();
      

      【讨论】:

        【解决方案4】:

        你为什么不做类似的事情:

            string r = new string( s.Reverse().ToArray() ) ;
        

        或者(因为 Reverse() 已经被使用了)像这样的:

        public static class StringHelpers
        {
            public static string ToReverse( this string s )
            {
                char[] buf = new char[s.Length] ;
                int    i   = 0        ; 
                int    j   = s.Length ;
                while ( j > 0 )
                {
                    buf[i++] = s[--j] ;
                }
                return new string(buf) ;           
            }
        
        }
        

        它不是 LINQ,但我敢打赌它在这种情况下的性能比 LINQ 更好。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-08-30
          • 2013-09-02
          • 2021-10-10
          • 1970-01-01
          • 2012-08-24
          相关资源
          最近更新 更多