【问题标题】:reconcile 2 arrays with varied length c#协调 2 个不同长度的数组 c#
【发布时间】:2013-09-05 10:30:43
【问题描述】:

我有两个数组,它们将在我的 C#/.NET Windows 窗体应用程序中使用 ChartDirector(http://www.advsofteng.com/product.html) 用作图表上的 x 轴输入。

其中一个数组的长度与另一个数组不匹配,导致图表上较短的数组显示不规则。我需要创建一个新数组,将短数组作为输入,并在此处将剩余值填充为 0 等效项(Chart.NoValue),以便两个数组的长度相等。

有没有办法做到这一点,而无需将短数组复制到一个新的数组中并用 0 填充剩余的值,如下所示:

double[] newArray = new double[longArray.Length];
for (int i = 0; i < shortArray.Length; i++)
{
    newArray[i] = shortArray[i];
}
for (i = shortArray.Length; i < newArray.Length; i++)
{
    newArray[i] = Chart.NoValue; 
}
//Chart director equivalent of 0, in terms of chart visibility

本质上,我在问是否有一种方法可以修改 shortArray,即在末尾添加新的“0”元素,使其长度等于 longArray。

【问题讨论】:

    标签: c# .net arrays


    【解决方案1】:
    double[] newArray = new double[longArray.Length];
    Array.Copy(shortArray, newArray, shortArray.Length);
    

    如果新元素必须是 Chart.NoValue 而不是 0,那么这里是另一种解决方案:

    double[] newArray = Enumerable.Repeat(Chart.NoValue, longArray.Length).ToArray();
    Array.Copy(shortArray, newArray, shortArray.Length);
    

    【讨论】:

      【解决方案2】:

      您可以使用 Array.Resize 方法 http://msdn.microsoft.com/en-us/library/bb348051.aspx 来调整数组的大小。

      如果 newSize 大于旧数组的长度,则分配一个新数组并将所有元素从旧数组复制到新数组。如果 newSize 小于旧数组的 Length,则分配一个新数组,并将元素从旧数组复制到新数组,直到填满新数组;旧数组中的其余元素将被忽略。如果 newSize 等于旧数组的 Length,则此方法不执行任何操作。 来源:http://msdn.microsoft.com/en-us/library/bb348051.aspx

      【讨论】:

      • 这完全符合我的需要。但是,出于好奇,是否可以使用某种Linq-type expression 来用“Chart.NoValue”替换在我重新调整大小的双数组末尾添加的所有 0?否则,我应该只使用上面的第二个 for 循环吗?
      • 您可以执行类似使用 SetValue 的操作。 this: newArray.SetValue(Chart.NoValue, Enumerable.Range(index, count).ToArray()); 并使用 Enumerable.Range 创建索引列表。参见:Array.SetValue 方法(Object, Int32[]) msdn.microsoft.com/en-us/library/758awxk7.aspx)
      【解决方案3】:

      C# 中的数组具有固定长度,因此您无法更改现有实例。您必须使用Chart.NoValue 创建一个新数组并“填充”它。

      但是,您可以将第一个循环替换为等效的(并且更快)

      shortArray.CopyTo(newArray, 0);
      

      【讨论】:

        猜你喜欢
        • 2013-07-17
        • 1970-01-01
        • 1970-01-01
        • 2021-06-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多