Удалить элементы, которые являются префиксами других
Цитата: Владимир от 14.08.2021, 17:14Добрый день, помогите пожалуйста, есть например такой List
[spoiler title=""]
D:\Programs\Discord\App\Discord
D:\Programs\Discord\App\Discord\app-1.0.9002
D:\Programs\Discord\App\Discord\app-1.0.9002\modules
D:\Programs\Data\VEGAS Pro
D:\Programs\Data\VEGAS Pro\local
D:\Programs\Data\VEGAS Pro\local\modified
D:\Programs\Audition\Data
D:\Programs\Audition\Data\AppDataRoaming
D:\Programs\Audition\Data\AppDataRoaming\Audition
[/spoiler]Как я могу получить только
[spoiler title=""]
D:\Programs\Discord\App\Discord
D:\Programs\Data\VEGAS Pro
D:\Programs\Audition\Data
[/spoiler]
?
Добрый день, помогите пожалуйста, есть например такой List
D:\Programs\Discord\App\Discord
D:\Programs\Discord\App\Discord\app-1.0.9002
D:\Programs\Discord\App\Discord\app-1.0.9002\modules
D:\Programs\Data\VEGAS Pro
D:\Programs\Data\VEGAS Pro\local
D:\Programs\Data\VEGAS Pro\local\modified
D:\Programs\Audition\Data
D:\Programs\Audition\Data\AppDataRoaming
D:\Programs\Audition\Data\AppDataRoaming\Audition
Как я могу получить только
D:\Programs\Discord\App\Discord
D:\Programs\Data\VEGAS Pro
D:\Programs\Audition\Data
?
Цитата: Adler от 14.08.2021, 18:26Добрый день.
Забавная задачка 🙂
Быстро пришло в голову только через костыль:
[spoiler title=""]private void button1_Click(object sender, EventArgs e) { var path = new List<string>(){ "D:\\Programs\\Discord\\App\\Discord", "D:\\Programs\\Discord\\App\\Discord\\app-1.0.9002", "D:\\Programs\\Discord\\App\\Discord\\app-1.0.9002\\modules", "D:\\Programs\\Data\\VEGAS Pro", "D:\\Programs\\Data\\VEGAS Pro\\local", "D:\\Programs\\Data\\VEGAS Pro\\local\\modified", "D:\\Programs\\Audition\\Data", "D:\\Programs\\Audition\\Data\\AppDataRoaming", "D:\\Programs\\Audition\\Data\\AppDataRoaming\\Audition" }; List<string> new_list = new List<string>(); for (int i = 0; i <= 10; i++) { new_list = Del(Del(path)); } MessageBox.Show(String.Join("\r\n", new_list)); } private List<string> Del(List<string> instring) { var new_path = new List<string>(); instring.ForEach(x => { instring.Where(t => x.StartsWith(t) && t != x).ToList().ForEach(y => { new_path.Add(y); }); }); return new_path.Distinct().ToList(); } }В цикле for в качестве максимального значения для i указывается максимальная "глубина" вложеных папок.[/spoiler]
Добрый день.
Забавная задачка 🙂
Быстро пришло в голову только через костыль:
private void button1_Click(object sender, EventArgs e)
{
var path = new List<string>(){
"D:\\Programs\\Discord\\App\\Discord",
"D:\\Programs\\Discord\\App\\Discord\\app-1.0.9002",
"D:\\Programs\\Discord\\App\\Discord\\app-1.0.9002\\modules",
"D:\\Programs\\Data\\VEGAS Pro",
"D:\\Programs\\Data\\VEGAS Pro\\local",
"D:\\Programs\\Data\\VEGAS Pro\\local\\modified",
"D:\\Programs\\Audition\\Data",
"D:\\Programs\\Audition\\Data\\AppDataRoaming",
"D:\\Programs\\Audition\\Data\\AppDataRoaming\\Audition" };
List<string> new_list = new List<string>();
for (int i = 0; i <= 10; i++)
{
new_list = Del(Del(path));
}
MessageBox.Show(String.Join("\r\n", new_list));
}
private List<string> Del(List<string> instring)
{
var new_path = new List<string>();
instring.ForEach(x =>
{
instring.Where(t => x.StartsWith(t) && t != x).ToList().ForEach(y =>
{
new_path.Add(y);
});
});
return new_path.Distinct().ToList();
}
}
В цикле for в качестве максимального значения для i указывается максимальная "глубина" вложеных папок.
Цитата: Владимир от 14.08.2021, 20:23Спасибо, работает
Спасибо, работает