Maciej Los
Согласно вашему комментарию к решению № 1 by Биллвудраф[^]...
Before executing the code
First line
Second line
Third line
some text
Fifth line
Sixth line
Seventh line
some different text
ninth line
tenth line
eleventh line
some bla bla
After executing the code
First line
Second line
Third linesome text
Fifth line
Sixth line
Seventh linesome different text
ninth line
tenth line
eleventh linesome bla bla
Решение Linq:
//your lines
string[] lines = {"First line", "Second line", "Third line",
"some text", "Fifth line", "Sixth line", "Seventh line", "some different text",
"ninth line", "tenth line", "eleventh line", "some bla bla"};
//find lines which does not contain "line" word
var notnumberedlines = lines
.Where(x=>!x.Contains("line"))
.Select((x,i) => new {Index = ((i+1)*3)-1, Line=x})
.ToList();
//remove these lines
var cleanlines = lines.Except(notnumberedlines.Select(x=>x.Line));
//add lines with "some text", "some different text", "somebla bla"
//use left outer join on index
var together = from c in cleanlines.Select((x,i)=> new{Index = i, Line = x})
join n in notnumberedlines on c.Index equals n.Index into g
select c.Line + g.Select(y=>y.Line).SingleOrDefault();
Для получения более подробной информации, пожалуйста, смотрите:
LINQ, которая: .Net-язык интегрированных запросов[
^]
Начало работы с LINQ на языке C# | Microsoft Docs[
^]
предложение Join (Справочник по c#) | Майкрософт документы[
^]
[РЕДАКТИРОВАТЬ]
Согласно нашему обсуждению (в комментариях к ответу), если вы хотите соединить каждую третью строку с предыдущей, попробуйте сделать это:
//generate 50 lines: line1, line2, ... , line50
string[] lines = Enumerable.Range(1,50).Select(x=> string.Format("Line{0}",x)).ToArray();
//get every 3. line
var everythirdline = lines
.Where((x,y)=>(y+1)%3==0)
.Select((x,i) => new {Index = ((i+1)*2)-1, Line=x})
.ToList();
//remove these lines
var cleanlines = lines.Except(everythirdline.Select(x=>x.Line));
//use left outer join on index
var together = (from c in cleanlines.Select((x,i)=> new{Index = i, Line = x})
join n in everythirdline on c.Index equals n.Index into g
select c.Line + g.Select(y=>y.Line).SingleOrDefault())
.ToList();
Результат:
Line1
Line2Line3
Line4
Line5Line6
Line7
Line8Line9
Line10
Line11Line12
Line13
Line14Line15
Member 10410972
Ладно, я не думаю, что ты хорошо меня понимаешь.
Чтобы сказать более просто:
Я хотел бы переместить каждую третью строку в textBox1.Text в конец строки, которая находится выше этой строки.
Например:
Если мой textBox1.Text содержит (перед выполнением кода):
Первая строка
Вторая строка
Третья строка
Четвертая строка
Пятая строка
Шестая строка
Седьмая строчка
Восьмая линия
Девятая линия
Десятая строка
Одиннадцатая строка
Двенадцатая строка
После выполнения кода
Первая строка
Вторая линия lineThird
Четвертая строка
Пятая строчка lineSixth
Седьмая строчка
Восьмая строчка lineNinth
Десятая строка
Одиннадцатая линия welfth line
Примечание:
текстовое поле textbox1.Текст насчитывает около 200 строк.
Если это возможно, то как я могу это сделать, а если нет, то приношу свои извинения.
Спасибо.
Maciej Los
Предположим, что вы не хотите удалять какую-то линию, но чтобы соединить каждую 3. линию, вы должны использовать другой алгоритм. Смотрите обновленный ответ в течение следующих нескольких минут.