Мы можем предположить, что все они имеют общий путь, но это неизвестно в начало.
Предположим, у меня есть следующие три записи:
- C :/Hello/World/This/Is/An/Example/Bla.cs
- C:/Hello/World/This/Is/Not/An/Example/
- C:/Hello/Earth/Bla/Bla/Bla
Второй пример:
- C:/Hello/World/This/Is/An/Example/Bla.cs
C:/Hello/World/This/Is/Not/An/Example/< /li>
Как бы вы поступили? Я попытался использовать string.split(@"/"), начал с первой строки и проверил, содержится ли каждая часть этого массива в других строках. Однако это будет очень дорогостоящий вызов, поскольку я повторяю (list_of_entries)^list_of_entries. Есть ли лучшее решение?
Моя текущая попытка будет примерно следующей (C# + LINQ):
public string CalculateCommonPath(IEnumerable paths)
{
int minSlash = int.MaxValue;
string minPath = null;
foreach (var path in paths)
{
int splits = path.Split('\\').Count();
if (minSlash > splits)
{
minSlash = splits;
minPath = path;
}
}
if (minPath != null)
{
string[] splits = minPath.Split('\\');
for (int i = 0; i < minSlash; i++)
{
if (paths.Any(x => !x.StartsWith(splits)))
{
return i >= 0 ? splits.Take(i).ToString() : "";
}
}
}
return minPath;
}
Подробнее здесь: https://stackoverflow.com/questions/248 ... irectories
Мобильная версия