【问题标题】:Get item from list through for-loop通过for循环从列表中获取项目
【发布时间】:2023-03-03 01:29:01
【问题描述】:

我正在尝试获取几个合作伙伴的几个项目的名称,但我可能会遗漏一些东西。

这是脚本

这就是列表的代码。

// JSON ---------------------------------------------
[System.Serializable]
public struct MyClassList
{   
    [System.Serializable]
    public struct Partner
    {
        public int partner_id;
        public string partner_name;
        public string _partner_logo_ressource_link;
    }

    public List<Partner> partner;

    [System.Serializable]
    public struct Project
    {
        public int project_id;
        public string project_name;
        public string partner_partner_name;
        public string type_type_name;
    }

    public List<Project> project;

    public static MyClassList CreateFromJSON(string jsonString)
        {
            return JsonUtility.FromJson<MyClassList>(jsonString);
        }
}
// --------------------------------------------------

这就是我试图获得价值的方式。

void InstantieMenuPartner()
{
    for(int i = 0; i < _partnerList.partner.Count; i++)
    {
        GameObject _instance_partner_menu = Instantiate(_prefab_menu_project);
        _instance_partner_menu.name = "Menu_Partner_"+_partnerList.partner[i].partner_name;

        _instance_partner_menu.transform.SetParent(GameObject.Find("Menu_Project").transform, false);

        // Instantie Button Project to Parent Menu Partner -------------------------------------------------------------------------------------------
        for(int p = 0; p < _projectList.project.Count(a => a.partner_partner_name == _partnerList.partner[i].partner_name); p++)
        {
            GameObject _instance_project_button = Instantiate(_prefab_button_project);

            Debug.Log(_projectList.project.Where(a => (a.partner_partner_name == _partnerList.partner[i].partner_name) && (a.project_name == _projectList.project[p].project_name)).Select(a => a.project_name).FirstOrDefault());

            _instance_project_button.transform.SetParent(GameObject.Find("Menu_Partner_"+_partnerList.partner[i].partner_name).transform, false);

            //Text _instance_project_button_text = _instance_project_button.GetComponentInChildren<Text>();
            //_instance_project_button_text.text = _projectList.project[p].project_name;
        }
        // -------------------------------------------------------------------------------------------------------------------------------------------      
        _instance_partner_menu.SetActive(false);
    }
}

Debug.Log 部分是我遇到问题的地方。

解释一下,我在数据库中有一个完整的合作伙伴列表,每个合作伙伴都有几个项目。

通过循环,我正在尝试为合作伙伴实例化一个游戏对象并将项目设置为此游戏对象的子项。

但我不能让它工作。

【问题讨论】:

  • 尽量避免在 Unity 中使用 Linq,在更新中完成时速度较慢且占用内存,有时在 iOS 等某些平台上无法运行。尝试使用您自己的代码重做该方法。
  • 感谢您的建议 ;)

标签: c# linq list for-loop unity3d


【解决方案1】:

好的,我明白了。

将 Debug.Log 部分替换为:

Debug.Log(_projectList.project
    .Where(a => a.partner_partner_name == _partnerList.partner[i].partner_name)
    .Select(c => c.project_name)
    .ElementAtOrDefault(p));

因此,您只需要一个条件就可以得到合作伙伴的列表,然后我在列表中选择好的变量,然后使用 ElementAt 我得到我的值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-16
    • 1970-01-01
    • 2012-04-18
    • 1970-01-01
    • 2011-03-02
    • 2019-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多