【问题标题】:Unity - How to check if items within a list are the same value? [duplicate]Unity - 如何检查列表中的项目是否相同? [复制]
【发布时间】:2020-10-06 18:02:42
【问题描述】:

我有一个 Vector3Int 类型的列表,其中包含我的代理移动的结束位置,我想比较这些值以查看它们是否相等,

伪代码;

if (2 or more items within the list are the same value) {
  create a new end of path location for one or more of the agents  
}

提前感谢您的帮助

【问题讨论】:

  • 你试过什么?如果我给你一张写有数字的纸,作为人类你会怎么做

标签: list unity3d 2d


【解决方案1】:

有几种方法可以做到这一点。

您可以运行使用 LINQ 查询的循环。它将检查列表中的每个项目,并查看列表中是否有超过 1 个该项目。 LINQ 的 Count() 版本允许您比较值。

bool HasDuplicates = false;
foreach (var item in MyList) {
    if (MyList.Count(i => i.x == item.x && i.y == item.y) > 1) {
        HasDuplicates = true;
        break;
    }
}

或者您可以使用 Distinct() 创建第二个列表,其中每个值只有 1 个。然后比较两个列表的计数。如果不同的计数较低,则列表中必须有重复项。

var HasDuplicates = (MyList.Distinct().Count < MyList.Count)

【讨论】:

  • 第一个 sn-p 在性能方面非常糟糕,因为在最坏的情况下,您会迭代整个列表 n * n + 1 次!第二个仅有效,因为幸运的是,所讨论的类型是Vector3Int,它已经实现了正确的相等检查return a.x == b.x &amp;&amp; a.y == b.y &amp;&amp; a.z == b.z; .. 否则通常可能会发生Distinct 检查引用相等,在这种情况下它可能会因某些用途而失败案例;)
  • 这正是我列出这两种方法的原因。在大多数情况下,第二个很好,否则第一个足够好。不过可能有更好的方法。
  • 虽然效率不高,但比较列表中的值不会特别有效。
  • 在语法上它必须是 MyList.Distinct().Count() 而不是 MyList.Distinct().Count
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 2012-06-26
  • 1970-01-01
  • 2021-11-12
  • 2012-08-22
  • 1970-01-01
相关资源
最近更新 更多