我使用
构建了一个字符串数组string[] parts = string.spilt(" ");
得到一个包含X部分的数组,我想得到一个从元素
开始的字符串数组的副本parts[x-2]
除了明显的蛮力方法(制作一个新数组并插入字符串)之外,在C#中有更优雅的方法吗?
答案 0 :(得分:6)
我记得回答这个问题并且刚刚了解了一个可以提供高性能方法的新对象。
看看ArraySegment<T>
。它会让你做类似的事情。
string[] parts = myString.spilt(" ");
int idx = parts.Length - 2;
var stringView = new ArraySegment<string>(parts, idx, parts.Length - idx);
答案 1 :(得分:2)
Array.Copy怎么样?
http://msdn.microsoft.com/en-us/library/aa310864(VS.71).aspx
Array.Copy方法(Array,Int32,Array,Int32,Int32)
从指定源索引处开始复制Array中的一系列元素,并将它们粘贴到从指定目标索引开始的另一个Array。长度和索引指定为32位整数。
答案 2 :(得分:0)
List<string> parts = new List<string>(s.Split(" "));
parts.RemoveRange(0, x - 2);
假设List<string>(string[])
已优化为使用现有数组作为后备存储而不是执行复制操作,这可能比执行数组复制更快。
答案 3 :(得分:-1)
使用Array.Copy。它有一个超载,可以满足您的需求:
Array.Copy(Array,Int32,Array, Int32,Int32)
从指定源开始的Array复制一系列元素 索引并将它们粘贴到另一个Array 从指定目的地开始 索引。
答案 4 :(得分:-1)
我猜是这样的:
string[] less = new string[parts.Length - (x - 2)];
Array.Copy(parts, x - 2, less, 0, less.Length);
( sans 关闭了1个我确信在那里的bug。)