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

我用

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

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

parts[x-2]

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

【问题讨论】:

    标签: c# arrays


    【解决方案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 个错误。)

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2016-04-09
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-06-06
              • 2013-04-02
              • 2011-05-31
              相关资源
              最近更新 更多