Domanda

Creo una serie di stringhe con

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

E ottieni un array con X parti al suo interno, vorrei ottenere una copia dell'array di stringhe che inizia da element

parts[x-2]

Oltre all'ovvio approccio di forza bruta (crea un nuovo array e inserisci stringhe), esiste un modo più elegante per farlo in C#?

È stato utile?

Soluzione

Che ne dici di Array.Copy?

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

Metodo Array.Copy (Array, Int32, Array, Int32, Int32)

Copia un intervallo di elementi da un Array a partire dall'indice di origine specificato e li incolla in un altro Array a partire dall'indice di destinazione specificato.La lunghezza e gli indici sono specificati come numeri interi a 32 bit.

Altri suggerimenti

Mi sono ricordato di aver risposto a questa domanda e ho appena appreso di un nuovo oggetto che potrebbe fornire un metodo ad alte prestazioni per fare ciò che desideri.

Dare un'occhiata a ArraySegment<T>.Ti permetterà di fare qualcosa del genere.

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

Supponendo che List<string>(string[]) è ottimizzato per utilizzare l'array esistente come archivio di backup invece di eseguire un'operazione di copia, ciò potrebbe essere più veloce rispetto alla copia di un array.

Utilizzo Array.Copia.Ha un sovraccarico che fa ciò di cui hai bisogno:

Array.Copy (Array, Int32, Array, Int32, Int32)
Copia una serie di elementi da un array che iniziano dall'indice di origine specificato e li incolla su un altro array che inizia all'indice di destinazione specificato.

Metodo Array.Copy

Immagino qualcosa del tipo:

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

(senza il bug disattivato da 1 che sono sicuro sia lì.)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top