0

我有两个脚本。

脚本 1 脚本 2

在 Script1 中,我声明了一个数组列表,它包含值 2、4、6 等...

public static ArrayList aArray= new ArrayList();

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

我必须检查 Script2 的 arraylist 中是否存在值 5。

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

如何得到它?

4

3 回答 3

3

首先,我建议使用泛型List<T>而不是非泛型ArrayList,这使您能够指定进入该列表的对象类型(为了更好的类型安全)。
此外,声明一个变量readonly可以防止您意外覆盖它,这通常是Lists 的情况(毕竟,您总是可以只使用Clear它们):

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

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

if (!Script1.items.Contains(i)) {
    // This will only execute if the list does not contain i.
    items.Add(i);
}
于 2013-03-28T08:36:00.293 回答
2

尝试使用包含。此代码将检测您是否已经在 ArrayList 中拥有该值,并将阻止代码再次添加它。

public static ArrayList aArray= new ArrayList();

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

如果你想删除一个值,它就像aArray.Remove(i)一样简单

于 2013-03-28T08:35:56.947 回答
1

如果我理解正确,Script1 在您的相机中,而 Script2 在字符中。为了这个示例,我们将分别称它们为 MainCamera 和 Character。

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

无论如何,在 Script2 中使用这个:

if(GameObject.Find("MainCamera").GetComponent<Script1>().aArray.Contains(5))
{
   //Do your code here
}
于 2013-03-28T09:14:41.117 回答