p->next(ポインタ)的なことをC#で
環境:VisualStudio2005 .Net C# FrameWork 2.0
プログラムを作成してみましたが、
どこが間違っているのかもわかりにくい上に
思うような結果が得られませんでした。
もっとスマートで美しい解法はないでしょうか。
お知恵をお貸しください。
---
No, Class, ChildNo, Status からなるクラス Info があり、
Info 型の配列 info には以下のデータが格納されているとします。
なお、PrimaryKey=No+Classで、配列 info は、No+Classの昇順に並んでいるとします。
class Info
{
byte no;
byte class;
byte childno;
byte[] status= new byte[256];
public Info()
{
for (int i = 0; i < 256; i++)
{
this.status[i] = 0;
}
}
}
Info []info = new Info[8];
No,Class,ChildNo,Status
1, 1, 2, ___
1, 2, 3, ___
1, 3, 4, ___
2, 1, 5, ___
3, 1, 6, ___
4, 1, 7, ___
5, 1, 8, ___
5, 2, 9, ___
まず、No=1,Class=1をキーとしてChildNo=2を取得し、
見つかったChildNoをNoとしNo=2,Class=1をキーとしてChildNo=5を取得、
次に、No=5,Class=1をキーとしてChildNo=8を取得、
次に、No=8,Class=1をキーとしてデータが見つからないので終了
最終的に、No=1,Class=1のStatusの[2][5][8]に1をセットしたいと思います(残りは0)。
同様に、No=2,Class=1からは5,8のデータを
No=5,Class=1からは8のデータを取得したいです。
for (int i = 0; i < info[i].Length; i++)
{
Func(info[i].No, info[i].Class);
}
private byte Func(byte no, byte class)
{
byte cno = 0;
byte tmpno = 0;
byte ret = 0;
for (int i = 0; i < info.Length; i++)
{
if (info[i].no == no && info[i].class == class)
{
cno = info[i].childno;
tmpno = info[i].childno;
info[i].status[childno] = 1;
while ((ret = SetNearFlag(tmpno, class)) != 0)
{
info[i].status[ret] = 1;
tmpno = ret;
}
info[i].status[tmpno] = 1;
break;
}
}
return cno;
}
よろしくお願いいたします。
お礼
やっぱりドライバを作成するような感じなのですね。 情報ありがとうございました。