相关疑难解决方法(0)

用C#填充数组

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

1)ForEach,因为我理解通过值传递数组中的元素,所以我不能更改它们

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

3)for循环并不漂亮,我想这就是为什么Java人员开始介绍这个紧凑的符号

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

要演示Java的语法,请考虑此代码打印数字7的三倍:

int[] iii = {1, 2, 3};
Arrays.fill(iii, 7);
for (int i : iii) {
    System.out.println(i);
}
Run Code Online (Sandbox Code Playgroud)

c# arrays

18
推荐指数
4
解决办法
9万
查看次数

如何使用特定值快速填充数组?

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

谢谢.

.net arrays

13
推荐指数
1
解决办法
7851
查看次数

使用Enumerable.Range消耗大量内存?

本来我想知道是否ToList比使用的构造函数分配的内存List<T>这需要一个IEnumerable<T>(没有区别).

出于测试目的,我曾经Enumerable.Range创建了一个源数组,我可以用它来创建List<int>via 1. ToList和2. constructor的实例.两者都在创建副本.

这就是我注意到以下内存消耗的巨大差异:

  1. Enumerable.Range(1, 10000000) 要么
  2. Enumerable.Range(1, 10000000).ToArray()

当我使用第一个并调用ToList生成的对象时,内存比数组(38,26MB/64MB)大约多60%.

问:推理错误的原因是什么?

var memoryBefore = GC.GetTotalMemory(true);
var range = Enumerable.Range(1, 10000000);
var rangeMem = GC.GetTotalMemory(true) - memoryBefore; // negligible
var list = range.ToList();
var memoryList = GC.GetTotalMemory(true) - memoryBefore - rangeMem;

String memInfoEnumerable = String.Format("Memory before: {0:N2} MB List: {1:N2} MB"
    , (memoryBefore / 1024f) / 1024f
    , (memoryList   / 1024f) / 1024f);
// …
Run Code Online (Sandbox Code Playgroud)

.net c# linq memory-management

7
推荐指数
1
解决办法
1484
查看次数

如何在C#中初始化整数数组

可能重复:
c#Leaner初始化int数组的方法

基本上我想知道是否有比下面显示的更有效的代码

    private static int[] GetDefaultSeriesArray(int size, int value)
    {
        int[] result = new int[size];
        for (int i = 0; i < size; i++)
        {
            result[i] = value;
        }
        return result;
    }
Run Code Online (Sandbox Code Playgroud)

大小可以从10到150000不等.对于小阵列不是问题,但应该有更好的方法来做到这一点.我正在使用VS2010(.NET 4.0)

.net c#

5
推荐指数
2
解决办法
3442
查看次数

标签 统计

.net ×3

c# ×3

arrays ×2

linq ×1

memory-management ×1