Passer la référence à l'élément dans C# Array
Question
Je construis un tableau de chaînes avec
string[] parts = string.spilt(" ");
Et obtenez un tableau contenant X parties, j'aimerais obtenir une copie du tableau de chaînes commençant à l'élément
parts[x-2]
Outre l'approche évidente par force brute (créer un nouveau tableau et insérer des chaînes), existe-t-il une manière plus élégante de le faire en C# ?
La solution
Et Array.Copie ?
http://msdn.microsoft.com/en-us/library/aa310864(VS.71).aspx
Méthode Array.Copy (Array, Int32, Array, Int32, Int32)
Copie une plage d'éléments d'un tableau en commençant à l'index source spécifié et les colle dans un autre tableau en commençant à l'index de destination spécifié.La longueur et les index sont spécifiés sous forme d'entiers 32 bits.
Autres conseils
Je me souviens avoir répondu à cette question et je viens de découvrir un nouvel objet qui peut fournir une méthode haute performance pour faire ce que vous voulez.
Jeter un coup d'œil à ArraySegment<T>
.Cela vous permettra de faire quelque chose comme.
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);
En admettant que List<string>(string[])
est optimisé pour utiliser le tableau existant comme magasin de sauvegarde au lieu d'effectuer une opération de copie, cela pourrait être plus rapide que d'effectuer une copie de tableau.
Utiliser Tableau.Copie.Il a une surcharge qui fait ce dont vous avez besoin :
Array.copy (array, int32, array, int32, int32)
Copie une gamme d'éléments d'un tableau à partir de l'indice de source spécifié et les colle à un autre tableau à partir de l'indice de destination spécifié.
Je suppose que quelque chose comme :
string[] less = new string[parts.Length - (x - 2)];
Array.Copy(parts, x - 2, less, 0, less.Length);
(sans le bug de 1 qui, j'en suis sûr, est là.)