如何初始化列表 T给定的尺寸(相对于容量)?(How to initialize a List<T> to a given size (as opposed to capacity))

   IT问题网   2018-12-04 00:00:00

问 题

.net提供了一个通用的列表容器,其性能几乎是相同的(见阵列与清单问题的性能)。然而它们是在初始化很大的不同。

数组是很容易初始化一个默认值,并定义他们已经有一定的规模:

 的string []氩=新的字符串[10];
 

它允许一个安全随机分配项目,说:

 氩[5] ="你好";
 

与清单事情比较棘手。我可以看到在做相同的初始化两种方式,这两者都不是,你会什么叫优雅的:

 名单,其中,串 l =新的名单,其中,串(10);
的for(int i = 0;我小于10;我++)l.add(空);
 

 的string []氩=新的字符串[10];
名单字符串 l =新的名单,其中,串(ar);
 

什么将是一个更清洁的方式?

编辑:到目前为止的答案是指能力,这是别的东西比pre-填充列表。例如,只可容纳10创建的列表上,缺一不可 l [2] ="somevalue中"

编辑2:人们想知道为什么我想用列表这种方式,因为这是没有办法的办法,他们的目的使用。我可以看到两个方面的原因:

  1. 人们可以非常令人信服认为,名单是"下一代"阵列,增加了灵活性,几乎没有损失。因此,人们应该使用他们默认。我指出他们可能不那么容易初始化。

  2. 什么我目前正在写一个基类产品默认的功能的一个更大的框架的一部分。在默认的功能,我提供的名单的大小是已知的先进,所以我也可以使用数组。不过,我想提供任何基类的机会,动态地扩展它,所以我选择列表。

解决方案

我不能说我需要这往往 - 你能不能提供更多的细节,为什么你要这样?我可能把它作为一个静态方法在辅助类:

 公共静态类列表
{
公共静态列表 t repeateddefault t(诠释计数)
{
返回重复(默认值(t),计数);
}

公共静态列表 t重复 t(吨价,诠释计数)
{
名单 t ret =新的名单,其中,t(计数);
ret.addrange(enumerable.repeat(价值数));
返回ret;
}
}
 

您的可以的使用 enumerable.repeat(默认值(t),计数).tolist()但是这将是低效的,由于缓冲区调整

编辑:正如评论指出的那样,你可以把重复使用循环来填充列表,如果你想的话。这将是稍快了。我个人觉得用重复详细描述了code和怀疑,在真实世界中的性能差异将是无关的,但您的里程可能会有所不同。

标签:如何初始化列表给定尺寸相对于容量



分享:

  • 微信
  • QQ好友
  • QQ空间
  • 新浪微博


热门推荐

如何使用XPath用的XDocument?(how to use XPath with XDocument)

problem there is a similar question, but it seems that th ...

什么是WebConfigurationManager和ConfigurationManager中的区别?(What's the difference between the WebConfigurationManager and the ConfigurationManager)

problem what's the difference between the webconfiguratio ...

NUnit的测试运行秩序(NUnit Test Run Order)

problem by default nunit tests run alphabetic ...

如何恢复从C#数据库(How to restore a database from C#)

problem i have a sql 2008 db. i am running a form that ba ...

调用堆栈不说"你来自哪里"但是"你要去哪里,下一个"?(The call stack does not say "where you came from", but "where you are going next")

problem in a previous question (get object ca ...

如何读取和写入ID3标签在C#中的MP3?(How to read and write ID3 tags to an MP3 in C#)

problem is there a library for reading and writing id3 ta ...

如何设置读取权限的X.509证书从.NET私钥文件(How to set read permission on the private key file of X.509 certificate from .NET)

problem here is the code to add a pfx to the cert store. ...

获取列表视图的项目双击事件(Get the item doubleclick event of listview)

problem how to get the item double click event of listvie ...

MongoDB的交易?(MongoDB transactions)

problem playing around with mongodb and norm in .net. th ...

确定是否.NET程序集是从相同的源代码构建(Determine whether .NET assemblies were built from the same source)

problem does anyone know of a way to compare two .net ass ...

如何prevent更新一个ListViewItem的的文字时,在闪烁的ListView?(How to prevent flickering in ListView when updating a single ListViewItem's text)

problem all i want is to update an listviewit ...

谁应该调用Dispose IDisposable的对象时传递到另一个对象?(Who should call Dispose on IDisposable objects when passed into another object)

problem is there any guidance or best practic ...

获得一天的后缀使用则DateTime.ToString时,()(Getting day suffix when using DateTime.ToString())

problem is it possible to include the day suffix when for ...

改变目标框架我在Visual Studio解决方案的所有项目(Change the Target Framework for all my projects in a Visual Studio Solution)

problem i need to change the target framework ...

string.IsNullOrEmpty(串)与string.IsNullOrWhiteSpace(串)(string.IsNullOrEmpty(string) vs. string.IsNullOrWhiteSpace(string))

problem is use of string.isnullorempty(string ...

上传文件使用C#到ftp(Upload file to ftp using c#)

problem i try upload a file to an ftp-server with c#. the ...

什么是App.config中呢?(What is app.config for)

problem settings.settings generates settings.designer.cs ...

我可以使用ASP.NET MVC与常规ASP.NET Web表单(Can I use ASP.NET MVC together with regular ASP.NET Web forms)

problem i have on request from a client built a huge site ...

更优雅的异常处理不是多个catch块?(More Elegant Exception Handling Than Multiple Catch Blocks)

problem using c#, is there a better way to handle multipl ...

有什么问题确实IStructuralEquatable和IStructuralComparable解决?(What problem does IStructuralEquatable and IStructuralComparable solve)

problem i've noticed these two interfaces, an ...