在C#中填充一个数组[重复]

Posted

技术标签:

【中文标题】在C#中填充一个数组[重复]【英文标题】:fill an array in C# [duplicate] 【发布时间】:2013-02-01 21:01:41 【问题描述】:

在 Java 中,Arrays 类中有大约 18 个静态“填充”方法,用于为数组中的每个元素分配一个值。我正在寻找 C# 中的等价物来实现相同的目标,但我没有找到任何具有相同紧凑性的东西:

1) 据我所知,ForEach 按值传递数组中的元素,因此我无法更改它们

2) 从 Enumerable 重复创建一个新数组,创建一个新数组然后从数组中复制每个元素似乎是开销

3) for 循环并不漂亮,我想这就是为什么 Java 人员一开始就引入了这种紧凑的表示法

4) Array 类的 Clear 方法可以将所有内容设置为零,但是如何将零转换为我想要的非零值?

为了演示 Java 的语法,请考虑以下打印 3 倍数字 7 的代码:

int[] iii = 1, 2, 3;
Arrays.fill(iii, 7);
for (int i : iii) 
    System.out.println(i);

【问题讨论】:

发布一个Java示例,也许我明白你想要什么 不知道java的18种方法。发布一个例子。 在不需要复杂化的情况下为什么要复杂化.. 这可以帮助你 [***.com/questions/14210369/… 【参考方案1】:

你可以试试这样的:

我已将数组初始化为值为 5,您可以同样输入您的数字。

int[] arr = new int[10]; // your initial array

arr = arr.Select(i => 5).ToArray(); // array initialized to 5.

【讨论】:

创建新数组,而不是填充现有数组。【参考方案2】:

给自己写一个扩展方法

public static class ArrayExtensions 
    public static void Fill<T>(this T[] originalArray, T with) 
        for(int i = 0; i < originalArray.Length; i++)
            originalArray[i] = with;
        
      

并像使用它

int foo[] = new int[]0,0,0,0,0;
foo.Fill(13);

将用 13 填充所有元素

【讨论】:

【参考方案3】:

你可以写一个扩展方法

public static void Fill<T>(this T[] array, T value)

  for(int i = 0; i < array.Length; i++) 
  
     array[i] = value;
  

【讨论】:

复制粘贴以前的答案不是很酷;-) 我没有复制粘贴任何人的答案。【参考方案4】:
public static void Fill<T>(this IList<T> col, T value, int fromIndex, int toIndex)

    if (fromIndex > toIndex)
        throw new ArgumentOutOfRangeException("fromIndex");

    for (var i = fromIndex; i <= toIndex; i++)
        col[i] = value;

适用于所有IList&lt;T&gt;s 的东西。

【讨论】:

IList&lt;T&gt; 仍然是T[] 如果这样的通用函数 - 我会使用默认 prms... public static void Fill(this IList col, T value, int fromIndex=0, int toIndex=- 1) if (toIndex == -1) toIndex = col.Count-1;【参考方案5】:

假设你要填写数字 13。

int[] myarr = Enumerable.Range(0, 10).Select(n =&gt; 13).ToArray();

List&lt;int&gt; myarr = Enumerable.Range(0,10).Select(n =&gt; 13).ToList();

如果您喜欢列表。

【讨论】:

这不是在创建一个新数组吗? Arrays.fill() 在 Java 中没有这样做,它正在修改现有的。 由于问题是关于用常量值填充数组(即仅用于初始化),我假设您当时正在创建数组。所以我试图提供一个简短的答案。如果您的数组之前已经存在,我会在 Igoy 的回答中使用 Select 方法。 我喜欢这个答案,因为它让我有机会选择将注入常量的索引范围。 +1! 在使用 EF 时,我喜欢列表的想法,因为它很容易使用并且已经被许多其他实体和对象普遍使用。在这里 +1【参考方案6】:
int[] arr = Enumerable.Repeat(42, 10000).ToArray();

我相信这可以完成工作:)

【讨论】:

我知道这种方法,正如我在 OP 中提到的那样,我正在寻找修改现有数组的东西。

以上是关于在C#中填充一个数组[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在c#中随机填充复选框-Visual Studio [重复]

在 C# 中用较小的数组复制/填充大数组的最佳方法是啥?

在一个操作中声明后在结构中填充数组的最简单方法[重复]

C#编写一个方法,去除数组中重复数据。

请问C#中有没有判断数组元素重复,或如何去除重复呀?

使用 C# 在复杂的 JSON 数组中查找和打印重复项