【问题标题】:How to reverse an array using the Reverse method. C# [closed]如何使用 Reverse 方法反转数组。 C# [关闭]
【发布时间】:2017-07-10 07:23:04
【问题描述】:

由于某种原因,当我应用反向方法时,没有任何变化。

public static string ReverseString(string word)
    {
        char[] myArray = word.ToCharArray();
        myArray.Reverse();

        string ans = string.Join("", myArray);

        return ans;
    }

【问题讨论】:

  • myArray = myArray.Reverse();
  • 它返回一个新数组,它不会改变原来的
  • 使用 Array.Reverse() 原地反转
  • 对于这个方法的一个版本,它适用于 Unicode 组合字符,请参阅这个问题:stackoverflow.com/q/15029238/1127114
  • 完成。谢谢

标签: c# arrays reverse


【解决方案1】:

也许您将您正在使用的方法与 static Array.Reverse 混淆了,这确实是 void 方法?

Array.Reverse Method (Array)


您使用的是IEnumerable 的LINQ 扩展方法,您可以在此处找到其参考:

Enumerable.Reverse Method (IEnumerable)


不过,对于您的具体情况,我会使用这个 oneliner:

return new string(word.Reverse().ToArray()); 

【讨论】:

    【解决方案2】:

    问题是 myArray.Reverse() 没有修改 myArray。此方法返回一个 IEnumerable 的 char 与 myArray 的倒数。

    试试这个:

    var reversed = myArray.Reverse();
    

    然后使用反向操作。

    【讨论】:

      【解决方案3】:

      尝试Array.Reverse(myArray) 而不是myArray.Reverse()

      您混淆了Enumerable.ReverseArray.Reverse 方法。

      IEnumerable<char>.Reverse: 返回一个新的反转数组而不改变旧数组

      myArray = myArray.Reverse();
      

      Array.Reverse: 一个将反转输入数组的 Void 方法

      Array.Reverse(myArray);
      

      【讨论】:

      • 是的,效果很好,谢谢
      • @Callum 不客气
      【解决方案4】:

      您需要将返回值存储在一个变量中:

      var reversed = myArray.Reverse();
      

      这是您正在使用的Reverse() 方法的签名,顺便说一下,这是Enumerable 类中的扩展方法:

      public static IEnumerable<TSource> Reverse<TSource>(this IEnumerable<TSource> source);
      

      查看返回类型是IEnumerable,因此您需要存储它然后使用它。

      你可以这样做:

      public static string ReverseString(string word)
      {
          return string.IsNullOrWhiteSpace(word) ? string.Empty 
              :  string.Concat(word.Reverse());
      }
      

      【讨论】:

        【解决方案5】:

        Reverse 方法是根据原始项返回一个新数组(或集合)的方法。

        public static string ReverseString(string word)
        {
            char[] myArray = word.ToCharArray();
            myArray = myArray.Reverse().ToArray(); //<-- Call ToArray() method to convert back to the array and execute the deffered action.
        
            string ans = string.Join("", myArray);
        
            return ans;
        }
        

        这个方法是通过延迟执行来实现的。直接的 返回值是一个存储所有信息的对象 执行该操作所需的。此方法表示的查询 在通过调用其枚举对象之前不会执行 GetEnumerator 方法直接或通过在 Visual C# 或 For 中使用 foreach 每个都在 Visual Basic 中。

        与OrderBy不同,这种排序方式不考虑实际 在确定顺序时重视自己。相反,它只是返回 以相反的顺序生成它们的元素 底层来源。

        【讨论】:

          【解决方案6】:

          你应该这样做Array.Reverse(myArray)

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-02-11
            • 2021-12-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多