Разделить, а затем последовательно присоединить строку - С# 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);
}