Передать ссылку на элемент в массиве C #

StackOverflow https://stackoverflow.com/questions/31007

  •  09-06-2019
  •  | 
  •  

Вопрос

Я создаю массив строк с помощью

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, которая, я уверен, там есть.)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top