【问题标题】:Sorting an array effecting previous arrays对影响先前数组的数组进行排序
【发布时间】:2017-07-11 19:32:03
【问题描述】:

我正在尝试对数组进行排序以找到它的平均值。找到中位数后,我希望继续使用该数组。使用代码时,

            double[] views, viewssorted;
            views = new double[] {9.0, 1111.0,  2.0 };
            viewssorted = views;
            Array.Sort(viewssorted);

我的viewssortedviews 数组都得到了排序。我怎样才能做到只有viewssorted 被排序?

【问题讨论】:

  • 通过创建数组的副本。
  • 你没有两个数组;你有两个变量指向同一个数组。
  • 排序数组如何帮助您找到均值?
  • 本来是中位数

标签: c# arrays sorting


【解决方案1】:

您的问题是数组本质上是类,因此是引用类型。引用类型不保存值,而是指向内存中的一个区域。

当您编写viewssorted = views; 时,您将在视图中拥有的相同引用分配给已排序的视图。它们本质上是被两个变量引用的同一个对象。

要创建数组的副本,但具有相同的内部引用(在您的情况下是相同的双精度值),请使用 Array.Clone()

这将是

viewssorted = (double[])Array.Clone(views);

【讨论】:

    【解决方案2】:

    使用时

    viewssorted = views;
    

    viewssortedviews 是对同一个数组的引用。因此,第一个中的任何更改都会反映在第二个中。

    您应该使用Array.Clone 来制作数组的副本。

    viewssorted = (double[]) views.Clone();;
    

    【讨论】:

      【解决方案3】:

      数组是 C# 中的引用类型,这就是它们都排序的原因。

      你可以的

      views.CopyTo(viewssorted)
      

      或者

      viewssorted = views.Clone()
      

      【讨论】:

        猜你喜欢
        • 2013-09-23
        • 1970-01-01
        • 2021-04-14
        • 2011-02-18
        • 2021-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多