2010-03-11 10 views
9

Come posso recuperare tutti gli elementi dopo il primo che non inizia con uno "-" usando linq?Cercando di ottenere tutti gli elementi dopo la prima corrispondenza usando linq

var arr = new[] {"-s1", "-s2", "va", "-s3", "va2", "va3"}; 
var allElementsAfterVA = from a in arr where ???? select a; 

voglio allElementsAfterVA essere "-s3", "va2", "va3"

+0

Perché vuoi usare linq qui? Non sa né importa in quale ordine si trovano i tuoi articoli se si tratta di un semplice array di stringhe –

+0

Intendi il primo che NON inizia con un "-"? –

+0

@MatteS: Okay - Ora la tua domanda ha più senso :) –

risposta

16

Per trovare tutti gli argomenti dopo il primo che non inizia con "-", si può fare:

var elementsAfterFirstNonDash = arr.SkipWhile(i => i[0] != '-').Skip(1); 

questo trova "va ", quindi salta via Skip (1). Il resto degli argomenti verrà restituito.

+1

Sembra una soluzione solo per questo test case. Non sembra che tu possa usarlo su qualsiasi set di dati ... –

+0

Sembra ancora una soluzione specifica per i dati di test. Forse qualcosa di un po 'più generico. O la domanda è vaga per creare una soluzione generica? –

+0

Sì, la soluzione sembra essere solo per questo test case. Ad esempio, voglio ottenere tutti gli elementi dopo il primo * non * che inizia con "-" ... – MatteS

0

Potete essere più chiari? Se ho capito bene, il primo che inizia con un "-" è "-s1", quindi gli elementi dopo questo sarebbero "-s2", "va", "-s3", "va2", "va3" e non "-s3", "va2", "va3"

+0

Scusa, mi sono perso un * non * lì ... intendevo dire "dopo il primo che non inizia con un" - "" .. – MatteS

0

Non riesco a ottenere la domanda dal testo, ma guardando l'esempio: hai guardato SkipWhile()? Sembra essere correlato/utile?

0
arr.Where((n, i) => i > 0 && n.StartsWith("-")) 

cede

-s2 -s3 

E 'questo quello che volevi dire?

Problemi correlati