我有一个看起来像这样的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];
在我的应用程序过程中,我使用这两个数组进行了很多工作,并且值发生了变化,等等。成员的名称或活动状态可能会发生变化,这导致araries变得不同。
最终,我需要将它们进行比较,以便根据第一个结果显示的结果与另一个结果进行比较。
例如,根据应用程序的作用,在第一个数组中停用了该成员,我需要更新数组2来停用该同一成员。
我正在尝试将一些数据库设计理念与int CK(伪造密钥)一起使用,以便能够快速在基于CK的另一个数组中查找条目。
由于无法弄清楚,因此不得不使用嵌套的for这样的循环,这很糟糕:
foreach (Memberdata md in memarray1)
{
foreach (Memberdatamd2 in memarray2)
{
if (md.ck = md2.ck)
{
//de-activate member
}
}
}
有更好的方法吗?当我从第一个数组获得CK值时,我只想在第二个基于CK的数组中找到索引。
关于结构的其他任何技巧或建议也将不胜感激。我应该使用数组以外的东西吗?我将如何通过列表完成同一件事?
谢谢!
答案 0 :(得分:6)
我应该使用数组以外的东西吗?
是的。不要使用数组;它们很少是正确的数据结构。
我如何使用列表来完成相同的事情?
列表仅稍微好一点。它们不支持您所需的高效按键查找操作。
这听起来像是您想要的,而不是两个数组,两个Dictionary<int, MemberData>
,其中键为ck
。
答案 1 :(得分:1)
我完全同意 Eric Lippert 的上述回答。最好不要使用Array
。
使用List<MemberData>
可以实现相同的目的。您也可以使用LINQ
来查询您的DataStructure。
跟随是仅使用数组即可达到结果的一种方式
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();
}
}