Pregunta

Construyo una serie de cadenas con

string[] parts = string.spilt(" ");

Y obtener una matriz con X partes, me gustaría obtener una copia de la matriz de cadenas que comienza en el elemento

parts[x-2]

Aparte del enfoque obvio de fuerza bruta (crear una nueva matriz e insertar cadenas), ¿existe una forma más elegante de hacer esto en C#?

¿Fue útil?

Solución

¿Qué tal Array.Copy?

http://msdn.microsoft.com/en-us/library/aa310864(VS.71).aspx

Método Array.Copy (Array, Int32, Array, Int32, Int32)

Copia un rango de elementos de una matriz comenzando en el índice de origen especificado y los pega en otra matriz comenzando en el índice de destino especificado.La longitud y los índices se especifican como números enteros de 32 bits.

Otros consejos

Recordé haber respondido esta pregunta y acabo de enterarme de un nuevo objeto que puede proporcionar un método de alto rendimiento para hacer lo que quieres.

Echa un vistazo a ArraySegment<T>.Te permitirá hacer algo como.

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);

Asumiendo que List<string>(string[]) está optimizado para usar la matriz existente como almacén de respaldo en lugar de realizar una operación de copia, esto podría ser más rápido que hacer una copia de la matriz.

Usar Matriz.Copiar.Tiene una sobrecarga que hace lo que necesitas:

Array.Copy (matriz, int32, matriz, Int32, Int32)
Copia un rango de elementos de una matriz a partir del origen especificado index y los pega en otra matriz A partir del destino especificado índice.

Método Array.Copy

Supongo que algo como:

string[] less = new string[parts.Length - (x - 2)];
Array.Copy(parts, x - 2, less, 0, less.Length);

(sin el error por 1 error que estoy seguro está ahí).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top