C# 等效于 Java 的 Arrays.fill() 方法[重复]

Posted

技术标签:

【中文标题】C# 等效于 Java 的 Arrays.fill() 方法[重复]【英文标题】:C# equivalent to Java's Arrays.fill() method [duplicate] 【发布时间】:2011-10-13 06:39:53 【问题描述】:

我在 Java 中使用以下语句:

Arrays.fill(mynewArray, oldArray.Length, size, -1);

请建议 C# 等效项。

【问题讨论】:

docs.microsoft.com/en-us/dotnet/api/…,dotnet也提供同样的功能。 【参考方案1】:

我不知道框架中有什么可以做到这一点,但它很容易实现:

// Note: start is inclusive, end is exclusive (as is conventional
// in computer science)
public static void Fill<T>(T[] array, int start, int end, T value)

    if (array == null)
    
        throw new ArgumentNullException("array");
    
    if (start < 0 || start >= end)
    
        throw new ArgumentOutOfRangeException("fromIndex");
    
    if (end >= array.Length)
    
        throw new ArgumentOutOfRangeException("toIndex");
    
    for (int i = start; i < end; i++)
    
        array[i] = value;
    

或者如果你想指定计数而不是开始/结束:

public static void Fill<T>(T[] array, int start, int count, T value)

    if (array == null)
    
        throw new ArgumentNullException("array");
    
    if (count < 0)
    
        throw new ArgumentOutOfRangeException("count");
    
    if (start + count >= array.Length)
    
        throw new ArgumentOutOfRangeException("count");
    
    for (var i = start; i < start + count; i++)
    
        array[i] = value;
    

【讨论】:

我希望我的编辑是合理的.. 或者将变量命名为uptoIndex @nawfal:不,它是故意(尽管并非始终如一)排他性的。我已经整理并添加了一个替代方案。 乔恩,你为什么要检查异常情况并在 clr 这样做时扔掉自己?我对这种设计有点困惑。仅第二个条件检查(在您的两个示例中)就足够了吗? @nawfal:CLR 会抛出不同的异常。鉴于这些是方法参数,抛出的异常应该是 ArgumentExceptions,IMO。这表明是调用代码有问题,而不是方法本身的问题。 @JonSkeet,有点太晚了......仍然是一个想法:负数不会导致循环中的异常......抛出负数或反转启动和停止需要有充分的理由......【参考方案2】:

您似乎想做更多这样的事情

int[] bar = new int[]  1, 2, 3, 4, 5 ;
int newSize = 10;
int[] foo = Enumerable.Range(0, newSize).Select(i => i < bar.Length ? bar[i] : -1).ToArray();

使用旧值创建一个更大的新数组并填充额外的值。

简单的填充试试

int[] foo = Enumerable.Range(0, 10).Select(i => -1).ToArray();

或子范围

int[] foo = new int[10];
Enumerable.Range(5, 9).Select(i => foo[i] = -1);

【讨论】:

【参考方案3】:

这样试试

Array.Copy(source, target, 5);

更多信息here

【讨论】:

这与fill 的作用不同。 但它不是要复制的目标数组...它正在占用长度..mynewArray 是 int[] Rasel 的建议没问题。工作示例: int[] arr=new int[1000]; Array.Copy(arr.Select (i => 5).ToArray(),arr, arr.Length);

以上是关于C# 等效于 Java 的 Arrays.fill() 方法[重复]的主要内容,如果未能解决你的问题,请参考以下文章

等效于 Java 的 DirectByteBuffer 的 C# 方法

C# 等效于 Java 中的 class.forName() [重复]

Java 等效于 C# Linq 中的 Where 子句

Arrays.fill 在 Java 中使用多维数组

java.util.Arrays.fill方法

Java基础_Arrays