Разделить, а затем последовательно присоединить строку - С# Linq

Вот моя строка:

www.stackoverflow.com/info/ask/user/end

Я разделил его на / в список разделенных слов: myString.Split('/').ToList()

Выход:

www.stackoverflow.com
questions
ask
user
end

и мне нужно подключиться к строке, чтобы получить список:

www.stackoverflow.com
www.stackoverflow.com/questions
www.stackoverflow.com/info/ask
www.stackoverflow.com/info/ask/user
www.stackoverflow.com/info/ask/user/end

Я думаю об объединении linq, но, похоже, он здесь не подходит. Я хочу сделать это через linq

Ответы

Ответ 1

Вы можете попробовать повторить его с помощью foreach

var splitted = "www.stackoverflow.com/questions/ask/user/end".Split('/').ToList();
string full = "";
foreach (var part in splitted)
{
    full=$"{full}/{part}"
    Console.Write(full);
}

Или используйте linq:

var splitted = "www.stackoverflow.com/questions/ask/user/end".Split('/').ToList();
var list = splitted.Select((x, i) => string.Join("/", a.Take(i + 1)));

Ответ 2

Linq с побочным эффектом:

  string prior = null;

  var result = "www.stackoverflow.com/questions/ask/user/end"
    .Split('/')
    .Select(item => prior == null
       ? prior = item
       : prior += "/" + item)
    .ToList();

Позвольте распечатать

  Console.WriteLine(string.Join(Environment.NewLine, result));

Результат:

www.stackoverflow.com
www.stackoverflow.com/questions
www.stackoverflow.com/questions/ask
www.stackoverflow.com/questions/ask/user
www.stackoverflow.com/questions/ask/user/end

Ответ 3

Linq без побочных эффектов;)
Enumerable.Aggregate можно использовать здесь, если в результате мы используем List<T>.

var raw = "www.stackoverflow.com/questions/ask/user/end";

var actual = 
    raw.Split('/')
       .Aggregate(new List<string>(),
                 (list, word) =>
                 {
                     var combined = list.Any() ? $"{list.Last()}/{word}" : word;
                     list.Add(combined);
                     return list;
                 });

Ответ 4

без Linq напишите ниже код,

var str = "www.stackoverflow.com/info/ask/user/end";
        string[] full = str.Split('/');
        string Result = string.Empty;

        for (int i = 0; i < full.Length; i++)
        {
            Console.WriteLine(full[i]);

        }
        for (int i = 0; i < full.Length; i++)
        {
            if (i == 0)
            {
                Result = full[i];
            }
            else
            {
                Result += "/" + full[i];
            }
            Console.WriteLine(Result);
        }