我有一个数组,其值为有意义的索引。如何判断特定元素中是否存在特定值?
Array.Exists()
是我发现的最接近的,但它看起来过于复杂,我想要的,所以我很想知道它是否真的是最好的方式。
更新
好的,所以我有一个对象数组:
ImageGroup[] Images;
元素的索引对应于该项的特征。在这种情况下,索引是指原始图像的文件名中的值。当我遇到一个文件名时,我想检查一个元素是否存在于相应的索引处,如果没有则创建一个。
所以我想知道Images[someInt]
是否存在。
答案 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[]>