C# 如何使用存在于另一个数组和该数组中的值在数组中查找索引?

C# 如何使用存在于另一个数组和该数组中的值在数组中查找索引?,c#,arrays,C#,Arrays,我有一个c#类,看起来像这样: public class MemberData { public int meme_ck; public string meme_name; public bool meme_active; public MemberData(int ck2, string name2, bool active2) { meme_ck = ck2; meme_name = name2;

我有一个c#类,看起来像这样:

   public class MemberData
{
    public int meme_ck;
    public string meme_name;
    public bool meme_active;

    public MemberData(int ck2, string name2, bool active2)
    {
        meme_ck = ck2;
        meme_name = name2;
        meme_active = active2;
    }
}
我用该类制作了两个数组:

    private MemberData[] memarray1 = new MemberData[10000];
    private MemberData[] memarray2 = new Memberdata[10000];
在我的应用过程中,我使用这两个数组做了大量工作,值也发生了变化,等等。成员的名称或活动状态可能会发生变化,这会导致Arary变得不同

最后,我需要将它们进行比较,以便根据第一个结果与另一个进行比较

例如,根据应用程序执行的操作,第一个数组中的成员被取消激活,我需要更新数组2以取消激活该成员

我试图使用一些数据库设计哲学和int-CK(人工键),以便能够基于CK在另一个数组中快速查找条目

由于我无法理解,我不得不求助于像这样使用嵌套for循环,这很糟糕:

        foreach (Memberdata md in memarray1)
    {
        foreach (Memberdatamd2 in memarray2)
        {
            if (md.ck = md2.ck)
            {
                //de-activate member
            }
        }
    }
有更好的方法吗?当我从第一个数组得到CK值时,我只想在第二个数组中找到基于CK的索引

如果您有关于结构的任何其他提示或建议,也将不胜感激。我应该使用数组以外的东西吗?我如何使用列表完成同样的事情

谢谢

我应该使用数组以外的东西吗

对。不要使用数组;它们很少是正确的数据结构

我如何使用列表完成同样的事情

列表只是稍微好一点。它们不支持有效的按键查找操作,而这正是您所需要的


听起来你想要的不是两个数组,两个
字典
,关键是
ck
我完全同意上面Eric Lippert的回答。最好不要使用
数组
。 使用
列表
也可以实现同样的效果。您还可以使用
LINQ
查询数据结构

下面是使用数组实现结果的方法之一

class Program
{
    static MemberData[] memarray1 = new MemberData[10000];
    static MemberData[] memarray2 = new MemberData[10000];
    static void Main(string[] args)
    {
        for (int i = 0; i < memarray1.Length; i++)
        {
            memarray1[i] = new MemberData(i + 1, "MemName" + i + 1, true);
            memarray2[i] = new MemberData(i + 1, "MemName" + i + 1, true);
        }

        // SIMULATING YOUR APP OPERATION OF CHANGING A RANDOM ARRAY VALUE IN memarray1

        int tempIndex = new Random().Next(0, 9999);

        memarray1[tempIndex].meme_name = "ChangedName";
        memarray1[tempIndex].meme_active = false;

        //FOR YOUR UDERSTADNING TAKING meme_ck IN AN INTEGER VARIABLE

        int ck_in_mem1 = memarray1[tempIndex].meme_ck;

        //FINDING ITEM IN ARRAY2

        MemberData tempData = memarray2.Where(val => val.meme_ck == ck_in_mem1).FirstOrDefault();

        // THIS IS YOUR ITEM.

        Console.ReadLine();
    }
}
类程序
{
静态成员数据[]memarray1=新成员数据[10000];
静态成员数据[]memarray2=新成员数据[10000];
静态void Main(字符串[]参数)
{
for(int i=0;ival.meme_ck==ck_in_mem1.FirstOrDefault();
//这是您的商品。
Console.ReadLine();
}
}

您也可以使用:KeyedCollection嘿,谢谢!只是出于好奇,有没有一种方法也可以在数组结构中进行查找?我只是想学习。谢谢@约翰威廉姆斯:
Array.IndexOf
谢谢!我在上面也问过Eric,但是在数组中也有这样做的方法吗?只是为了学习。我可以在使用相同代码的数组中使用Linq吗?此外,我还知道如何在数组中找到完全匹配的索引(int index=array.IndexOf(memarray1,memarray2[I])。是否可以使用它来查找匹配的特定字段,而不是必须匹配整个条目?再次感谢