使用定义要查找多少个列表的字符串搜索列表的无限列表...(可以永远持续下去)

时间:2018-10-03 10:12:38

标签: c# unity3d

我有一条路径,该路径并不总是相同,用户可以输入例如/ main / jumanji / hacks,但随后输入/ main / users / pirate / cool / beans

由此,我想检查该路径是否存在于伪环境中,例如/ main / jumanji / hacks是否类似于folder.contains(main)?文件夹[main]。包含? jumanji,文件夹[main] [jumanji]。包含吗?骇客 返回文件夹[主] [jumanji] [hacks]。文件 要么 返回文件夹[main] [jumanji] [hacks]。文件夹

问题是我不知道用户要写什么,并且潜在地,我有列表列表的列表,这些列表可能永远存在。如何检查路径是否存在并从中获取数据?

public class Example : MonoBehaviour
{
    private string path = "/main/users/pirate/cool";

    public bool Exists()
    {
        string[] folders = path.Split('\\');

        //List<Folder> folders // assume it's already populated

        // for(folders) contain /"main"/ 
            // for(folders main) contains? users
                // for folders(main, users) contains? pirate
                    // for folders(main, users, pirate) contains? cool

                        // return folders[main][users][pirate][cool].Files
                        // or
                        // return folders[main][users][pirate][cool].Folder

        return false;
    }
}

[System.Serializable]
public class Folder
{
    public string Path;
    public List<string> Folders;
    public List<File> Files;
}

[System.Serializable]
public class File
{
    public string Name;
    public string Text;
    public string Extension;
}

2 个答案:

答案 0 :(得分:2)

我对您的代码进行了一些修改:

[System.Serializable]
public class Folder
{
    // Supposing you have the name of the folder instead of its path
    // Otherwise, you just have to check if the paths are equals
    public string Name;
    public List<Folder> Folders; // Folder instead of string
    public List<File> Files;
}

public bool Exists( string path )
{
    string[] hierarchy = path.Split('\\');

    List<Folder> folders = GetRootFolders() ; // assume it's already populated

    for( int i = 0 ; i < hierarchy.Length ; ++i )
    {
        if( folders == null || folders.Count == 0 )
            return false ;

        Folder desiredFolder = folders.Find( f => f.Name.Equals( hierarchy[i] ));

        if( desiredFolder == null )
            return false ;

        folders = desiredFolder.Folders;
    }
    return true;
}

答案 1 :(得分:0)

给定的代码过于复杂。

您要使用哪个文件夹?我猜这是string []文件夹,所以将List重命名为其他名称。 文件夹之一是文件夹[main] [users] .... [cool] .folder,但是由于已经是文件夹,因此无法使用。

能否请您重写给定的代码并更清楚地说明您想要什么?这些路径是什么?这是系统路径,游戏路径,...