#c# #.net #arrays #string
#c# #.net #массивы #строка
Вопрос:
У меня есть одна переменная пути, например ‘Customer \ Calls \ A1 \ A2 \ A3 \ A4’.Исходя из этого, я хочу разделить его на массив, например
'Customer'
'CustomerCalls'
'CustomerCallsA1'
'CustomerCallsA1A2'
'CustomerCallsA1A2A3'
'CustomerCallsA1A2A3A4'
Если мы сделаем это так
string[] directories = currentFolderPath.Split(Path.DirectorySeparatorChar);
мы получим набор папок, но он не попадет в вышеуказанную структуру
Кто-нибудь может предложить лучший подход
Комментарии:
1. Покажите свои усилия? В чем проблема?
Ответ №1:
Получайте родительский каталог, пока не дойдете до корня
если это абсолютный путь
private static IEnumerable<string> SplitPath(string path){
do{
yield return path;
path=Path.GetDirectoryName(path);
} while(path!=null);
}
если это относительный путь
private static IEnumerable<string> SplitRelativePath(string path){
do{
yield return path;
var lastIndex=path.LastIndexOf('\');
if(lastIndex==-1)
yield break;
path=path.Substring(0, lastIndex);
} while(path!=null);
}
//usage
SplitRelativePath(@"CustomerCallsA1A2A3A4");
/* result:
C:CustomerCallsA1A2A3A4
C:CustomerCallsA1A2A3
C:CustomerCallsA1A2
C:CustomerCallsA1
C:CustomerCalls
C:Customer
C: *
Комментарии:
1. мой путь будет похож на Customer \ Calls \ A1 \ A2 \ A3 \ A4 .. Так что в этом случае он завершится неудачей
Ответ №2:
string path = @"CustomerCallsA1A2A3A4";
var sections = path.Split('\').ToList();
var result = Enumerable.Range(0, sections.Count)
.Select(index => string.Join(@"", sections.Take(index 1)))
.ToList();
//Result:
// Customer
// CustomerCalls
// CustomerCallsA1
// CustomerCallsA1A2
// CustomerCallsA1A2A3
// CustomerCallsA1A2A3A4
Ответ №3:
Это не совсем очевидно из вашего сообщения, но если вам нужно что-то сделать с каждым элементом в вашем массиве, я бы, вероятно, воспользовался этим подходом:
string path = string.Empty;
"Customer\Calls\A1\A2\A3\A4".Split(new Char[] { '\' }).ToList().ForEach(
part => {
path = Path.Combine(path, part);
// Do stuff!
}
);
Ответ №4:
// easy and simple try this
string path = @"CustomerCallsA1A2A3A4";
string[] pathArr = path.Split('\');
List<string> list = new List<string>();
for (int i = 0; i < pathArr.Length; i )
{
string temp = pathArr[i];
if (i > 0)
{
temp = list[i - 1].ToString() @"" temp;
}
list.Add(temp);
}
Ответ №5:
string path = "Customer\Calls\A1\A2\A3\A4";
var pathArr = path.Split(new string[] { "\" }, StringSplitOptions.None);
var pathList = new List<string>();
while (pathArr.Length != pathList.Count)
{
string modifiedPath = "";
for (int i = 0; i < pathArr.Length; i )
{
modifiedPath = modifiedPath pathArr[i] "\";
if (i == pathList.Count)
{
pathList.Add(modifiedPath);
break;
}
}
}
foreach (var str in pathList)
{
Console.WriteLine(str.Remove(str.Length - 1));
}
Console.ReadKey();