传递对 C# 数组中元素的引用

Posted

技术标签:

【中文标题】传递对 C# 数组中元素的引用【英文标题】:Pass reference to element in C# Array 【发布时间】:2010-09-07 01:22:24 【问题描述】:

我用

构建了一个字符串数组
string[] parts = string.spilt(" ");

并获得一个包含 X 部分的数组,我想获得从元素开始的字符串数组的副本

parts[x-2]

除了明显的蛮力方法(创建一个新数组并插入字符串)之外,在 C# 中有没有更优雅的方法来做到这一点?

【问题讨论】:

【参考方案1】:

我记得回答过这个问题,并且刚刚了解了一个新对象,它可以提供一种高性能的方法来做你想做的事。

看看ArraySegment<T>。它会让你做类似的事情。

string[] parts = myString.spilt(" ");
int idx = parts.Length - 2;
var stringView = new ArraySegment<string>(parts, idx, parts.Length - idx);

【讨论】:

【参考方案2】:

Array.Copy 怎么样?

http://msdn.microsoft.com/en-us/library/aa310864(VS.71).aspx

Array.Copy 方法(Array, Int32, Array, Int32, Int32)

从指定源索引开始的 Array 中复制一系列元素,并将它们粘贴到从指定目标索引开始的另一个 Array。长度和索引指定为 32 位整数。

【讨论】:

【参考方案3】:
List<string> parts = new List<string>(s.Split(" "));
parts.RemoveRange(0, x - 2);

假设 List&lt;string&gt;(string[]) 被优化为使用现有数组作为后备存储而不是执行复制操作,这可能比执行数组复制更快。

【讨论】:

【参考方案4】:

使用Array.Copy。它有一个可以满足你需要的重载:

Array.Copy(数组,Int32,数组, Int32, Int32)从指定源开始的 Array 中复制一系列元素 索引并将它们粘贴到另一个数组 从指定的目的地出发 索引。

【讨论】:

【参考方案5】:

Array.Copy Method

我猜是这样的:

string[] less = new string[parts.Length - (x - 2)];
Array.Copy(parts, x - 2, less, 0, less.Length);

sans 我确定其中有 1 个错误。)

【讨论】:

以上是关于传递对 C# 数组中元素的引用的主要内容,如果未能解决你的问题,请参考以下文章

C#中怎样统计数组中一个一维数组中每个元素出现的次数?

java 值传递 数组传递

Java方法中传递数组与改变数组值的问题

Java方法中传递数组与改变数组值的问题

通过引用传递数组元素

值传递和引用传递的区别