Передать ссылку на элемент в массиве C #
Вопрос
Я создаю массив строк с помощью
string[] parts = string.spilt(" ");
И получите массив с X частями в нем, я хотел бы получить копию массива строк, начинающихся с element
parts[x-2]
Помимо очевидного подхода грубой силы (создание нового массива и вставка строк), есть ли более элегантный способ сделать это в C #?
Решение
Как насчет Array.Copy?
http://msdn.microsoft.com/en-us/library/aa310864 (ПРОТИВ 71).aspx
Массив.Метод копирования (Array, Int32, Массив, Int32, Int32)
Копирует диапазон элементов из массива, начинающегося с указанного исходного индекса, и вставляет их в другой массив, начинающийся с указанного целевого индекса.Длина и индексы задаются в виде 32-разрядных целых чисел.
Другие советы
Я вспомнил, что отвечал на этот вопрос, и только что узнал о новом объекте, который может обеспечить высокопроизводительный метод выполнения того, что вы хотите.
Взгляните на ArraySegment<T>
.Это позволит вам сделать что-то вроде.
string[] parts = myString.spilt(" ");
int idx = parts.Length - 2;
var stringView = new ArraySegment<string>(parts, idx, parts.Length - idx);
List<string> parts = new List<string>(s.Split(" "));
parts.RemoveRange(0, x - 2);
Предполагая , что List<string>(string[])
оптимизирован для использования существующего массива в качестве резервного хранилища вместо выполнения операции копирования, это может быть быстрее, чем выполнение копирования массива.
Использование Массив.Копировать.У него есть перегрузка, которая делает то, что вам нужно:
Массив.Копировать (Массив, Int32, Array, Int32, Int32)
Копирует диапазон элементов из массива, начинающегося с указанного исходного индекса, и вставляет их в другой массив начиная с указанного конечного индекса.
Я думаю, что-то вроде:
string[] less = new string[parts.Length - (x - 2)];
Array.Copy(parts, x - 2, less, 0, less.Length);
(sans ошибка off by 1, которая, я уверен, там есть.)