检查单元3d中数组中是否存在值

时间:2013-03-28 08:29:25

标签: c# arrays monodevelop unity3d

我有两个剧本。

SCRIPT1 SCRIPT2

在Script1中我声明了一个arraylist,它包含值2,4,6等......

public static ArrayList aArray= new ArrayList();

function update(){
   if(bool1)
   {
      aArray.Add(i);
   }
}

我必须检查来自Script2的arraylist中存在的值5。

如果值存在,我必须得到它的密钥。

如何获得它?

3 个答案:

答案 0 :(得分:3)

首先,我建议使用通用List<T>而不是非通用ArrayList,这使您可以指定进入该列表的对象类型(为了更好的类型安全性)。登记/> 此外,声明变量readonly会阻止您意外覆盖它,List通常就是这种情况(毕竟,您只能Clear这样做:

public static readonly List<int> items = new List<int>();

现在回答您的实际问题,如果您想检查列表中是否存在值,您可以使用方法Contains
要检查值 not 是否存在,只需在表达式前放置一个!

if (!Script1.items.Contains(i)) {
    // This will only execute if the list does not contain i.
    items.Add(i);
}

答案 1 :(得分:2)

尝试使用Contains。此代码将检测您是否已经具有ArrayList中的值,并将停止代码再次添加它。

public static ArrayList aArray= new ArrayList();

function update()
{
   if(aArray.Contains(i)==false)
   {
      aArray.Add(i);
   }
}

如果你想删除一个值就像 aArray.Remove(i)

一样简单

答案 2 :(得分:1)

如果我理解正确,Script1在你的相机中,而Script2在一个角色中。为了这个例子,我们将分别称它们为MainCamera和Character。

现在,除非我理解错误,否则您尝试从Script2访问Script1中的数组。虽然其他答案非常正确,但unity3D需要一些解决方法才能访问它。

无论如何,在Script2中使用它:

if(GameObject.Find("MainCamera").GetComponent<Script1>().aArray.Contains(5))
{
   //Do your code here
}