【问题标题】:Remove duplicated elements List<Vector3> Mono / C# - Unity3D删除重复的元素 List<Vector3> Mono / C# - Unity3D
【发布时间】:2017-03-29 17:31:59
【问题描述】:

我需要删除 Vector3 列表中的重复元素。 例如,这是一个列表:

List<Vector3> PointsToGo = new List<Vector3>();

PointsToGo.Add(new Vector3(1, 1, 1));
PointsToGo.Add(new Vector3(2, 2, 2));
PointsToGo.Add(new Vector3(1, 1, 1)); // Get this one or the first one out
PointsToGo.Add(new Vector3(4, 4, 4));

你知道如何解决这个问题吗?也许 Linq 可以帮助我?

感谢您的回答!

【问题讨论】:

  • 这是什么Vector3 类?它来自哪里?
  • @spender Vector3 是 Unity 特有的结构之一——基本上只有 3 个浮点数(和一堆辅助方法)。
  • @spender A struct 来自 untiy。 Here 就是它的样子。

标签: c# linq unity3d mono


【解决方案1】:

这是你的解决方案

PointsToGo = PointsToGo.Distinct().ToList();

请注意,您已将 using System.Linq; 添加到代码顶部。

【讨论】:

  • VS 2015 不知道 Vector3 的 .Distinct()。我需要使用指令吗?
  • 你必须导入using System.Linq;
  • mmh,它看起来不像这样有效 - 我现在尝试使用较小的列表。编辑:它适用于一个小列表,但不适用于我的大列表。
  • @louis12356:由于浮点精度问题,请谨慎使用此方法。
  • 对于我的情况,它现在可以正常工作,但感谢您让我知道这一点!
【解决方案2】:

如果您不想使用 Linq(根据 Unity 文档,这是一件好事),您可以使用以下内容:

List<Vector3> list = new List<Vector3>(new HashSet<Vector3>(originalListWithDuplicate));

另一种解决方案是使用 HashSet 集合。这是该集合的目的,避免重复。您可能必须实现 IEqualityComparer,以便它的行为完全符合您的需要。

【讨论】:

  • 感谢您的解决方案!
猜你喜欢
  • 2018-06-14
  • 2011-07-13
  • 1970-01-01
  • 1970-01-01
  • 2012-09-28
  • 1970-01-01
  • 1970-01-01
  • 2011-06-22
  • 2013-07-05
相关资源
最近更新 更多