当前位置:  开发笔记 > 编程语言 > 正文

C#数组初始化 - 使用非默认值

如何解决《C#数组初始化-使用非默认值》经验,为你挑选了4个好方法。

在C#中初始化动态大小数组的最简单的方法是什么?

这是我能想到的最好的

private bool[] GetPageNumbersToLink(IPagedResult result)
{
   if (result.TotalPages <= 9)
      return new bool[result.TotalPages + 1].Select(b => true).ToArray();

   ...

Nigel Touch.. 74

如果用'slickest'表示最快,我恐怕Enumerable.Repeat可能比for循环慢20倍.见http://dotnetperls.com/initialize-array:

Initialize with for loop:             85 ms  [much faster]
Initialize with Enumerable.Repeat:  1645 ms 

所以使用Dotnetguy的SetAllValues()方法.



1> Nigel Touch..:

如果用'slickest'表示最快,我恐怕Enumerable.Repeat可能比for循环慢20倍.见http://dotnetperls.com/initialize-array:

Initialize with for loop:             85 ms  [much faster]
Initialize with Enumerable.Repeat:  1645 ms 

所以使用Dotnetguy的SetAllValues()方法.



2> Mark Cidade..:

使用Enumerable.Repeat

Enumerable.Repeat(true, result.TotalPages + 1).ToArray()


我认为Nigel的业绩备注值得一提 - http://stackoverflow.com/questions/136836/c-array-initialization-with-non-default-value/1051227#1051227
我无法相信人们会投票支持那些"模糊"的东西(在我看来),并且对于像填充数组这样简单的操作来说代价很高.`var arr = new type [10]; for(int i = 0; i 现在,这很漂亮!

3> Neil Hewitt..:

编辑:作为一名评论者指出,我原来的实施没有奏效.这个版本可以工作,但是基于for循环是相当不光滑的.

如果您愿意创建扩展方法,可以试试这个

public static T[] SetAllValues(this T[] array, T value) where T : struct
{
    for (int i = 0; i < array.Length; i++)
        array[i] = value;

    return array;
}

然后像这样调用它

bool[] tenTrueBoolsInAnArray = new bool[10].SetAllValues(true);

作为替代方案,如果你对课堂闲逛感到满意,你可以试试这样的事情

public static class ArrayOf
{
    public static T[] Create(int size, T initialValue)
    {
        T[] array = (T[])Array.CreateInstance(typeof(T), size);
        for (int i = 0; i < array.Length; i++)
            array[i] = initialValue;
        return array;
    }
}

你可以调用它

bool[] tenTrueBoolsInAnArray = ArrayOf.Create(10, true);

不确定我更喜欢哪种,虽然我总是使用lurv扩展方法.



4> 小智..:

我实际上会建议:

return Enumerable.Range(0, count).Select(x => true).ToArray();

这样您只需分配一个数组.这基本上是一种更简洁的表达方式:

var array = new bool[count];

for(var i = 0; i < count; i++) {
   array[i] = true;
}

return array;


那仍然会分配两个数组.
推荐阅读
linjiabin43
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有