.NET中的数组失去了意义吗?

时间:2010-09-11 18:14:51

标签: c# arrays collections

对于保证使用阵列的每种情况......都有一个很棒的收藏品。在.NET中是否有任何针对数组的特定用例?

13 个答案:

答案 0 :(得分:34)

想到发送/接收具有特定长度的数据,即。串口,Web请求,FTP请求。基本上是在系统中较低级别工作的东西。此外,大多数集合都使用数组进行存储(可注意的例外:LinkedList<T>)。集合只是另一个抽象层。

答案 1 :(得分:6)

数组很有用,因为它们在内存中始终是线性的,并且可以快速使用。例如,我可以直接将byte[]和marshal编组到一个结构中而没有任何问题,但据我所知,首先必须将List<T>转换为数组。

答案 2 :(得分:5)

是的,当然还有数组的用途。有些方法仍然需要数组。

例如:

string[] items = "a,b;c:d".Split(new char[]{',',';',':'});

这仍然是保留大量项目的最简单方法,也是最需要的选择,直到您需要某些特定功能,例如动态增长。

答案 3 :(得分:5)

不,他们仍然有自己的用途,应该一直考虑。

记住数组是固定长度的非常基本的表示,因此它们非常快,并且大多数语言根据数组中使用的类型理解它们。

您需要在创建数组时定义数组大小,以后不能更改其大小。列表和其他内容可以根据需要增长,这会增加内存分配的开销。

列表和其他类型很有用,因为它们可以做很多事情,但有时你不需要额外的所有开销,所以你只需要一个数组。

这就像驾驶一辆4x4因为你认为有一天你可能需要去越野,即使有99.9%的机会你会在正常的道路上行驶。阵列将是基本的汽车,例如列表将是4x4 ......它可以做汽车可以做的其他事情(引擎盖可能会使用大部分相同的部件)但是以牺牲汽油,成本,可能不会适合某些停车位等...

阵列=性能和兼容性

列表(或其他表示)=以易于使用的性能和兼容性

答案 4 :(得分:4)

  

阵列丢失(某些)意义吗?

是。对于需要“表格”项目的许多任务,现在有更灵活和有用的解决方案,如List<>IEnumerable<>

  

阵列是否失去了重要性?

没有。它们是最快的存储形式,它们在大多数集合类中使用“引擎盖”,System.String等。

因此,数组变得更低级,应用程序员将更少地直接使用

答案 5 :(得分:3)

除了其他所有内容之外,您引用的许多优秀集合类都是使用数组实现的。您可能没有明确地使用它们,但是您正在使用它们,并且您的程序更适合它。这意味着数组 必须 使用该语言(或者使用大量本机代码直接实现集合,这将更加轻松)。

答案 6 :(得分:2)

是?每当我有一个内部维护固定大小的项集合的类型时,我使用一个数组,因为它是最快的迭代并且需要最少的内存。如果您不需要这些功能,使用List<T>Queue<T>等无意义。

答案 7 :(得分:2)

我每天使用数组工作的两种情况:

  • 图像分析。图像几乎总是byte []或int []数组。
  • 外部硬件通信。大多数设备需要完美结构化的阵列来发送/接收消息。

答案 8 :(得分:1)

这是一个公平的问题,但答案肯定是它们仍然有用。速度是一个原因,固定尺寸的简单性是另一个原因。但我认为最重要的是灵活性。如果您需要它,它为您提供了一个很好的基础来设计您自己的集合,并由一个简单的数组支持。

答案 9 :(得分:1)

不,Array不会失去它的重要性。

当您事先知道项目的数量时,您可以选择能够快速访问的数组。

2-在Graph theroy中,当你存储有关顶点之间链接的信息时,你可以使用比LinkList实现更快的数组来实现。

3-像string.split这样的方法返回数组。

你可以在一系列计算机问题中使用这个奇妙的静态占位符

答案 10 :(得分:1)

我使用数组来处理像WriteableBitmap类中的图像。

答案 11 :(得分:1)

我必须告诉你一件事Arrays是任何编程语言的构建块。如果要声明具有多个元素的存储,则数组是您的基本选项。

比如说一个List。

如果您看到List的定义,它实际上是

T []项目

只需使用Reflector并找到List的定义,您会惊讶地发现List实际上是一个Array。在.NET中,除LinkedList之外的大多数集合基本上都是一个Array实现。他们使用Array因为它的快速存储和检索。

我同意Array有更新或删除的限制,如果你的主要重点是存储而不是速度,你可能会去链接列表。

答案 12 :(得分:1)

您认为许多精美系列背后的支持领域是什么?