若文件名包含某个数字,请将其放入列表中
本文关键字:列表 包含某 文件名 数字 | 更新日期: 2023-09-27 18:01:09
我正在开始编写下载程序。。但我想把需要提取的文件、必需的文件或选项放在一个列表中,供下载者稍后参考。
输入到其中的样本字符串如下所示:
file0.txt:0 file1.txt:0 file2.txt:1 file3.txt:2 file4.txt:2 file5.txt:2
我想做的是得到这样的输出:
提取:file0.txt file1.txt
必需:file2.txt
可选:file3.txt file4.txt,file5.txt
但我不知道该怎么做。下载程序将使用这些列表下载外部应用程序需要的文件。
我假设每个文件名后面的数字应该指示它们是什么类型的文件?
现在你肯定应该尝试自己解决这个问题,因为这就是你学习的方式,但这里有一个相当优雅的LINQ解决方案,它可以创建与你发布的示例相同的输出。
// Define this in your class
enum FileType : byte
{
Extract = 0,
Required = 1,
Optional = 2,
}
static void Main(string[] args)
{
string input = "file0.txt:0 file1.txt:0 file2.txt:1 file3.txt:2 file4.txt:2 file5.txt:2";
// create list of files
var list = input.Split(' ').Select(file =>
{
var spl = file.Split(':');
var type = (FileType)Enum.Parse(typeof(FileType), spl[1]);
return new { Name = spl[0], Type = type };
}).ToArray();
// group by type and write to console
var group = list.GroupBy(l => l.Type);
foreach (var g in group)
{
Console.WriteLine("{0}: {1}", g.Key, String.Join(",", g.Select(a => a.Name)));
}
}
您可以对输入的字符串执行两次字符串拆分操作。
var input = "file0.txt:0 file1.txt:0 file2.txt:1 file3.txt:2 file4.txt:2 file5.txt:2";
// gets each pairing
var filePairs = input.split(new[] {' '});
foreach(var filePair in filePairs)
{
var fileInfo = filePair.split(new[] {';'}); // [file0.txt, 0]
var fileName = fileInfo[0]; // file0.txt
var fileKeep = fileInfo[1]; // 0, 1, or 2.
}
从这里,您可以使用foreach
循环中的信息执行您想要的操作。您可以将信息添加到列表中进行存储。