Passar referência para o elemento em C# Matriz
Pergunta
Eu construir uma matriz de seqüências de caracteres com
string[] parts = string.spilt(" ");
E obter uma matriz de X peças, eu gostaria de obter uma cópia da matriz de seqüências de caracteres começando pelo elemento
parts[x-2]
Além da óbvia abordagem de força bruta (fazer uma nova matriz e inserir strings), existe uma forma mais elegante de fazer isso em C#?
Solução
Como sobre a Matriz.Copiar?
http://msdn.microsoft.com/en-us/library/aa310864(VS.71).aspx
Matriz.O Método De Cópia (Matriz, Int32, Matriz, Int32, Int32)
Cópias de uma série de elementos a partir de uma Matriz inicial no índice de origem e cola-los para outra Matriz de partida, no destino especificado índice.O comprimento e os índices são especificados como números inteiros de 32 bits.
Outras dicas
Lembrei-me responder a esta questão e que acabou de aprender sobre um novo objeto que pode fornecer um alto desempenho método de fazer o que você quiser.
Dê uma olhada no ArraySegment<T>
.Ele vai deixar você fazer algo parecido.
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);
Partindo do princípio de que List<string>(string[])
é otimizada para usar a matriz existente como um armazenamento de backup em vez de fazer uma operação de cópia isto pode ser mais rápido do que fazer uma matriz de cópia.
Utilização Matriz.Cópia.Ele tem uma sobrecarga que faz o que você precisa:
Matriz.Cópia (Matriz, Int32, Matriz, Int32, Int32)
Cópias de uma série de elementos a partir de uma Matriz inicial na origem especificada índice e cola-los para outra Matriz de partida, no destino especificado o índice.
Eu acho que algo como:
string[] less = new string[parts.Length - (x - 2)];
Array.Copy(parts, x - 2, less, 0, less.Length);
(sans o fora por 1 bug que eu tenho certeza que está lá.)