3组对应的字符串.如何最好地储存

本文关键字:何最好 字符串 3组 | 更新日期: 2023-09-27 18:05:22

我使用foreach循环和directory. getfiles()来收集关于目录中文件的一些信息。我想存储3个字符串:文件名,FilePath, DirectoryName。我可以很好地得到这些信息,但是我想知道存储这些数据的最好方法是什么。

我希望能够查找其中一个字符串,并轻松找到其他字符串。例如,如果它们在3个数组中,我可以使用forloop来扫描Filename array并找到我想要的索引为45的条目。然后我可以使用FilePath[45], DirectoryName[45]来获取其他两个数组中的条目。

这是存储这些字符串最有效的方法吗?如果是这样,假设在另一种情况下,我无法事先使用GetFiles()方法获得数组的大小,那么List会是合适的替代方案吗?

3组对应的字符串.如何最好地储存

如果您有三个相关联的值,将它们封装在一个类型中。它不必是特别复杂的类型,尽管我可能会使其不可变—只需从构造函数初始化三个属性。最棘手的是命名,因为FileInfo已经是System.IO的一部分…但假设你选定了(糟糕的)名称FileData:

public sealed class FileData
{
    // Or use private readonly string variables and getter-only properties
    public string FileName { get; private set; }
    public string Path { get; private set; }
    public string DirectoryName { get; private set; }
    public FileData(string fileName, string path, string directoryName)
    {
        FileName = fileName;
        Path = path;
        DirectoryName = directoryName;
    }
    // Optional: override methods from System.Object.
    // ToString might be really handy; Equals/GetHashCode less likely.
}

这不会像三个单独的数组那样有效(在内存方面),但它将是一个更实际的使用,特别是在LINQ中。将不处理单独数组所获得的时间花在优化真正重要的位上。字符串占用的内存可能会使容器对象的开销相形见绌。

可以把它变成一个结构体而不是一个类,这样在某些方面会更有效率一些,而在另一些方面效率会稍低一些。我通常使用类,除非我有很好的理由不使用。

是的,我通常会使用List而不是数组- Eric Lippert有一些很好的理由…

有一件事让我有点困扰:这三个信息真的是正交的吗?或者你可以从目录名和文件名构造完整的路径吗?如果是这样,您应该可能只存储前两个,并在需要时构造第三个。

您可以创建一个结构体来保存这三个值,将它们全部放在一个List中,并使用Linq来选择正确的项。

也可以使用Tuple类型