【问题标题】:How do I quicky fill an array with a specific value?如何快速填充具有特定值的数组?
【发布时间】:2011-07-02 14:58:15
【问题描述】:

Array.Clear() 使用默认值(整数为零)填充数组,例如,我想使用 -1 填充它。

谢谢。

【问题讨论】:

标签: .net arrays


【解决方案1】:

另一种方式是:

int[] arr =  Enumerable.Repeat(-1, 10).ToArray();
Console.WriteLine(string.Join(",",arr));

【讨论】:

  • 这在必须编写的代码量方面是有效的。但我相信它会导致一个简单的循环。我不明白为什么 Buffer 类没有某种 Fill 方法。
  • 使用Enumerable.Repeat不仅需要在.NET级别遍历每个元素(意味着每次访问的数组边界检查),ToArray不知道IEnumerable的大小,所以它必须猜测数组的大小。这意味着每次超出ToArray 的缓冲区时,您都会获得数组分配,最后还会再分配一个用于修剪的分配。
【解决方案2】:

我不知道这种方法。不过你可以自己写一个:

public static void Init<T>(this T[] array, T value)
{
    for(int i=0; i < array.Length; ++i)
    {
        array[i] = value;
    }
}

你可以这样称呼它:

int[] myArray = new int[5];
myArray.Init(-1);

【讨论】:

    【解决方案3】:

    一种不使用方法的方法。

    int[,] array = new int[,]{{0, -1},{-1, 0}}; Console.WriteLine(array[0, 0]); Console.WriteLine(array[0, 1]);

    【讨论】:

      【解决方案4】:

      例如数组'test'填充了最小值,所以下面是代码:

      Array.Fill(test,int.MinValue)
      

      【讨论】:

        【解决方案5】:

        在 VB.NET 中只需制作一个 CompilerExtension 和模板

        Imports System.Runtime.CompilerServices
        
        <Extension>
        Public Sub Fill(Of T)(buffer() As T, value As T)
            For i As Integer = 0 To buffer.Length - 1 : buffer(i) = value : Next
        End Sub
        

        你可以在这样的任何数组上使用它

        Public MyByteBuffer(255) as Byte
        Public MyDoubleBuffer(20) as Double
        
        MyByteBuffer.Fill(&HFF)
        MyDoubleBuffer.Fill(1.0)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-06-11
          • 2011-03-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多