2011-08-31 19 views
49

ho questo codice:Selezionare ultimo elemento rapidamente dopo un .Split()

stringCutted = myString.Split("/"). // ??? 

e mi piacerebbe memorizzare nella stringCutted l'ultimo elemento del string[] dopo la scissione, direttamente, in modo rapido, senza memorizzare l'array diviso in una variabile e l'accesso a quell'elemento con array[array.length].

È possibile in C#?

+1

stringa "Cutted" ?????? –

+0

una stringa che è stata tagliata :) – markzzz

+1

No, sono italiano :) – markzzz

risposta

95

Se si sta utilizzando .NET 3.5 o superiore, è facile utilizzando LINQ to Objects:

stringCutted = myString.Split('/').Last(); 

noti che Last() (senza un predicato) è ottimizzato per il caso in cui la sorgente implementa IList<T> (come array monodimensionale fa) quindi questo non sarà iterare sull'intero array per trovare l'ultimo elemento. D'altra parte, che l'ottimizzazione non è documentato ...

+4

Sì, questo è dovuto a LINQ, è necessario aggiungere un 'using System.Linq;' al tuo codice. – Rumplin

+1

Funziona, ma non mai. In effetti 'Split ("/")' mi ha fatto un errore. 'Split ('/')' funziona ... – markzzz

+0

@markzzz: corretto. Supponevo che stavi postando codice funzionante per iniziare (la tua domanda usa virgolette). –

22
stringCutted=myString.Split("/").Last() 

Ma, appena cronaca, se si sta cercando di ottenere un nome di file da un percorso, questo funziona meglio mucchi:

var fileName=System.IO.Path.GetFileName("C:\\some\path\and\filename.txt"); 
// yields: filename.txt 
3

utilizzare LINQ

"t/e/s/t".Split("/").Last(); 
11

Dal momento che si desidera una soluzione che restituisce l'ultimo elemento direttamente, rapidamente, senza memorizzare la matrice spacco, credo che questo può essere utile:

stringCutted = myString.Substring(myString.LastIndexOf("/")+1); 
1

Per utilizzare questo codice, ho saltare ultimo elemento dal link Url.

string url = Request.Url.ToString().Substring(0, Request.Url.ToString().LastIndexOf('/')); 
Problemi correlati