[EDIT] Dopo aver riletto l'OP modificato, mi rendo conto che questo non fa ciò che viene ora richiesto. Questo si dividerà su ogni ennesimo obiettivo; l'OP vuole dividersi su ogni obiettivo DOPO l'ennesimo.
Lo lascerò qui per i posteri comunque.
Se si sta utilizzando il MoreLinq extensions si potrebbe approfittare del suo metodo Batch
.
Il tuo codice sarebbe quindi simile a questa:
string text = "1\t2\t3\t4\t5\t6\t7\t8\t9\t10\t11\t12\t13\t14\t15\t16\t17";
var splits = text.Split('\t').Batch(5);
foreach (var split in splits)
Console.WriteLine(string.Join("", split));
probabilmente sarei basta usare l'implementazione di Oded, ma ho pensato che avrei posto questo per un approccio alternativo.
L'attuazione di Batch()
assomiglia a questo:
public static class EnumerableExt
{
public static IEnumerable<IEnumerable<TSource>> Batch<TSource>(this IEnumerable<TSource> source, int size)
{
TSource[] bucket = null;
var count = 0;
foreach (var item in source)
{
if (bucket == null)
bucket = new TSource[size];
bucket[count++] = item;
if (count != size)
continue;
yield return bucket;
bucket = null;
count = 0;
}
if (bucket != null && count > 0)
yield return bucket.Take(count);
}
}
fonte
2013-04-16 10:44:58
'\ t' non è un ritorno a capo; è una scheda. Intendevi dire "newline"? –
la tua domanda non è chiara editala – gasroot
Oh, giusto. Intendevo tab allora. Ma non importa. Dovrebbe essere lo stesso metodo per dividere qualsiasi stringa all'ennesima occorrenza e come posso farlo? –