2015-08-17 7 views
30

Ho un elenco, simile a questo:Prendi una porzione della lista <string>

some headline content 
a subheadline containing the keyword 
1 2015-05-05 some data 
2 2015-05-05 some data 
3 2015-05-05 some data 
some content 
a subheadline containing another keyword 
useless stuff 

Così ora voglio prendere tutte le cose tra "parola chiave" e "un'altra parola chiave". Forse dovrei trovare l'indice "parola chiave" e "un'altra parola chiave" e utilizzare .GetRange(), ma c'è un modo più elegante per farlo con es. LINQ?

+0

Ti anche voler cercare le parole chiave nel espressione Linq? –

+0

Sembra che dovresti fare un passo indietro e usare Regexp su dati grezzi, quello che stai cercando di fare sembra una cattiva idea. – PTwr

+0

Contrassegno: No, non ho bisogno delle parole chiave, ma del materiale tra le parole chiave. – DaFunkyAlex

risposta

59

È possibile utilizzare SkipWhile e TakeWhile

var newList = list.SkipWhile(line => !line.Contains("keyword")) 
        .Skip(1) 
        .TakeWhile(line => !line.Contains("another keyword")) 
        .ToList(); 
2

yourList.Skip(10).Take(5);

Ciò saltare 10 voci, per poi tornare la prossima 5.

Ma questo funziona solo se si conosce già gli indici delle parole chiavi.

-5
List<String> stringsColl=new List<String>(); 
strinsColl.Add(..some you strs); 
... 
foreach(var str in stringsColl) 
{ 
    if(str.Contains("keyword") 
    { 
     ...do some work 
    } 
} 
+4

Questo mi darà la stringa "una subheadline contenente la parola chiave" ... – DaFunkyAlex