如何在数组中查找为0,0,0的Vector3

时间:2018-12-01 16:59:31

标签: unity3d

此代码有效:

/* create empty list */
Vector3[] vertices = new Vector3[50];
/* add only one element */
vertices[0] = new Vector3(0, 1, 2);

/* test with non-null vectors */
Vector3 test = new Vector3(4, 5, 6);
Vector3 test2 = new Vector3(0, 1, 2);
Vector3 found = Array.Find(vertices, x => x == test);
if (found != Vector3.zero) {
    Debug.Log("OK");
} else {
    Debug.Log("Not found");
}
Vector3 found2 = Array.Find(vertices, x => x == test2);
if (found2!= Vector3.zero) {
    Debug.Log("OK");
} else {
    Debug.Log("Not found");
}

令我烦恼的是,即使没有找到元素,它总是返回 。找不到元素时,它返回Vector3.zero

我的问题是:如果要在数组中包含Vector3.zero(实际上是我的情况)怎么办?您如何处理?

1 个答案:

答案 0 :(得分:3)

您的问题是,Array.Find<T>被定义为在未找到任何内容时返回default(T)。因为在这种情况下T是一个结构,并且这些结构是值类型,所以default(T)不能为null,但是该结构的默认值等于Vector3.zero。因此,您无法区分成功找到的Vector3.zero和没有匹配项。

Array.IndexOf(array, value)将返回等于value的第一个元素的索引,或者找不到-1的索引。那对您来说应该很好。如果结果不是-1,则可以使用该结果从数组中获取匹配的元素。