【问题标题】:Index of nested list嵌套列表的索引
【发布时间】:2017-04-13 19:30:23
【问题描述】:

如何从嵌套列表中的游戏对象中获取索引?

List<List<GameObject>> gpl = new List<List<GameObject>>();
List<GameObject> cbl ;
c = new gameObject("cube1");
cbl.Add(c);
gpl.Add(cbl);
Debug.Log(gpl.IndexOf(c);

【问题讨论】:

  • 那么哪个索引?外部列表中的索引,还是内部列表中的索引?
  • List&lt;List&lt;GameObject&gt;&gt; 中找到GameObject 的索引的答案必须是两个数字,即包含对象的列表的索引,以及其中的游戏对象的索引内表。像最后一行一样接近它是行不通的。
  • 我想同时获取索引、外部列表和内部列表

标签: c# list unity3d


【解决方案1】:

你不能直接在 gpl 中获取 'c' 的索引。这是因为 'c' 的类型是 GameObject,而 gpl 中的每个元素都是 List&lt;GameObject&gt;

因此,您的任务分为两部分: 1) 在 cbl 中获取 'c' 的索引 2) 获取gpl中cbl的索引

这里是一些示例代码:

List<List<GameObject>> gpl = new List<List<GameObject>>();
List<GameObject> cbl = new List<GameObject>();
GameObject c = new GameObject();
cbl.Add(c);
gpl.Add(cbl);

Debug.WriteLine(cbl.IndexOf(c));
Debug.WriteLine(gpl.IndexOf(cbl));

希望对您有所帮助!

【讨论】:

    【解决方案2】:

    您可以使用 Linq 执行此操作并返回一个 IEnumerable&lt;Tuple&lt;int,int&gt;&gt;,其中包含列表中的所有索引(外部和内部),其中内部列表包含您的值 (c)。

    IEnumerable<Tuple<int,int>> indexes = 
       gpl.Select((games, i) => new {games, i})
          .Where(arg => arg.games.IndexOf(c) > -1)
          .Select(arg => Tuple.Create(arg.i, arg.games.IndexOf(c)));
    

    【讨论】:

      【解决方案3】:

      如果您只能访问c,则需要先搜索cbl

      var gameIndex = gpl.FirstOrDefault(cbl => cbl.Contains(c))?.IndexOf(c);
      

      旧 C# 语法示例:

      var cbl = gpl.FirstOrDefault(c => c.Contains(c));
      if (cbl != null)
      {
           var gameIndex = cbl.IndexOf(c);
      }
      

      【讨论】:

      • 我只能从 raycast 访问 c。当我越过你的台词时: var gameIndex = gpl.FirstOrDefault(cbl => cbl.Contains(c))?.IndexOf(c);它给了我一个“意外的符号`。” " 错误
      • 用旧的 C# 语法更新了答案,看看。
      猜你喜欢
      • 2019-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-15
      • 1970-01-01
      • 2020-05-08
      • 1970-01-01
      相关资源
      最近更新 更多