如何确定数组是否包含特定索引的值?

时间:2011-02-01 22:00:25

标签: c# arrays

我有一个数组,其值为有意义的索引。如何判断特定元素中是否存在特定值?

Array.Exists()是我发现的最接近的,但它看起来过于复杂,我想要的,所以我很想知道它是否真的是最好的方式。


更新

好的,所以我有一个对象数组:

ImageGroup[] Images;

元素的索引对应于该项的特征。在这种情况下,索引是指原始图像的文件名中的值。当我遇到一个文件名时,我想检查一个元素是否存在于相应的索引处,如果没有则创建一个。

所以我想知道Images[someInt]是否存在。

3 个答案:

答案 0 :(得分:3)

更新

对于上次更新,这看起来更像是一个字典(除非你按照数字顺序进行,而不是“1,2,5”可能已经填充的地方,但3,4不存在且需要创建)。如果这是索引可能跳过的东西,我建议使用字典:

Dictionary<Int32,Image> images = new Dictionary<Int32, Image>();
// populated previously

Int32 needle = GetIndexOfImage(newImage);
if (!images.ContainsKey(needle))
  images.Add(needle, newImage);

然后,一旦完成填充,您就可以按以下方式按索引重新引用该项目:

images[specificIndex]

再一次,您还可以使用以下内容检索存储的所有元素:

images.Values

一些资源:

答案 1 :(得分:2)

第一反应:

 if (a[index] == interesting) ....

编辑之后:

int index = GetIndexFromFilename(filename);
// if (Images[index] != null && Images[index] == interesting) ....
if (Images[index] == null)
    Images[index] = CreateImage(filename);

但你应该只使用Dictionary<string, Image>并使用文件名作为密钥。

答案 2 :(得分:0)

听起来你正在寻找的是字典的功能。如果你发布了如何填充数组,以及你希望如何为它编制索引,那将非常有用。从我可以收集到的,这就是我将如何实现...

Dictionary<SomeEnum, ImageGroup> images = new Dictionary<SomeEnum, ImageGroup>();
foreach(SomeEnum enumValue in Enum.GetValues(typeof(SomeEnum)))
{
   ImageGroup group = BuildImageGroup();
   images.Add(enumValue, group);
}

然后你可以这样做:

...
if(images.ContainsKey(SomeEnum.SomeValue))
   return images[SomeEnum.SomeValue];
else
   return DoSomethingFancy();

如果单个枚举值(碰撞)有多个图像组,则可以在字典中使用ImageGroups的集合,如下所示:

Dictionary<SomeEnum, ImageGroup[]>