Я создаю массив строк с
string[] parts = string.spilt(" ");
И получить массив с X частями в нем, я хотел бы получить копию массива строк, начинающихся с элемента
parts[x-2]
Помимо очевидного подхода грубой силы (создание нового массива и вставка строк), есть ли более элегантный способ сделать это в C#?





Используйте Array.Copy. У него есть перегрузка, которая делает то, что вам нужно:
Array.Copy (Array, Int32, Array, Int32, Int32)
Copies a range of elements from an Array starting at the specified source index and pastes them to another Array starting at the specified destination index.
Я думаю, что-то вроде:
string[] less = new string[parts.Length - (x - 2)];
Array.Copy(parts, x - 2, less, 0, less.Length);
(без ошибка выключения на 1, которая, я уверен, там есть.)
Как насчет Array.Copy?
http://msdn.microsoft.com/en-us/library/aa310864(VS.71).aspx
Array.Copy Method (Array, Int32, Array, Int32, Int32)
Copies a range of elements from an Array starting at the specified source index and pastes them to another Array starting at the specified destination index. The length and the indexes are specified as 32-bit integers.
List<string> parts = new List<string>(s.Split(" "));
parts.RemoveRange(0, x - 2);
Предполагая, что List<string>(string[]) оптимизирован для использования существующего массива в качестве резервного хранилища вместо выполнения операции копирования, это может быть быстрее, чем копирование массива.
Я вспомнил, что отвечал на этот вопрос, и только что узнал о новом объекте, который может обеспечить высокопроизводительный метод выполнения того, что вы хотите.
Взгляните на ArraySegment<T>. Это позволит вам сделать что-то вроде.
string[] parts = myString.spilt(" ");
int idx = parts.Length - 2;
var stringView = new ArraySegment<string>(parts, idx, parts.Length - idx);