关于字典的用法
数字化变电站应用程序,关于字典方面的应用内容。字典加队列方式进行相应的存储,操作内容。速度快啊....
前边两个程序先练练,后边的一个程序是实际内容。没调试。
1
public class cache2


{3
Dictionary<ulong, List<string>> index = new Dictionary<ulong, List<string>>();4
public cache()5

{6
7
}8
public void add(int FactoryID, int TypeID, string Series)9

{10
ulong bi1 = FactoryID;11

12
bi1=bi1 << 32;13
bi1 += TypeID;14

15
if(!index.ContainsKey(bi1))16

{17
index.Add(bi1,new List<string>());18

19
}20
index[bi1].Add(Series);21

22
}23

24
public List<string> GetData(int FactoryID, int TypeID)25

{26
ulong bi1 = FactoryID;27

28
bi1 = bi1 << 32;29
bi1 += TypeID;30

31
if (index.ContainsKey(bi1))32

{33
return index[bi1];34

35
}36
else37

{38
return null;39
}40
41
}42

1
public class FactoryCache2


{3
Dictionary<string, int> index = new Dictionary<string, int>();4

5
public void add(int FactoryID,string name)6

{7
8
if (!index.ContainsKey(bi1))9

{10
index.Add(name, FactoryID);11

12
}13
14

15
}16

17
public int GetData(string name)18

{19

20

21
if (index.ContainsKey(name))22

{23
return index[bi1];24

25
}26
else27

{28
return -1;29
}30

31
}32

33

34
}1
class Program2

{3

Field#region Field4

5
//初始化用到的录用三次的数据.一开始首先录用三遍的数据,然后再进行相应的逻辑保护6
static int init = 0;7

8
//标记是否要进行相应的逻辑,隔一次进行一次保护逻辑9
static int nu2=0;10

11
//标记有多少个sno与id的对12
static int num = 0;13
14
//用来存储平均值。一个id对应一个平均值15
static int[] intArray;16

17
//用来表示进行隔一次进行相应的逻辑判断18
static bool[] boolArray;19

20
//sno与id的对应表21
static Dictionary<int, int> myDic1 = new Dictionary<int, int>();22

23
//存储320个值,key为id24
static Dictionary<int, Queue<int>> myDic2 = new Dictionary<int, Queue<int>>();25

26
static Queue<int> q = null;27

28
#endregion29

30
static void Main(string[] args)31

{32
//bool []m=new bool [3];33
//Console.WriteLine("{0},{1},{2}",m[0],m[2],m[1]);34
}35

36

/**//// <summary>37
/// 读取文件信息,初始化相应的dictionary,数组38
/// </summary>39
static void ReadFile()40

{41
FileStream fs = File.OpenRead("data.f");42
byte[] myByte = new byte[6];43
while (fs.Read(myByte, 0, 6) > 0)44

{45
int id = myByte[0] * 128 + myByte[1];46
int sno = myByte[4] + 128 + myByte[5];47
myDic1.Add(sno,id);48
q=new Queue<int>();49
//每个id都存有320个数据,初始化为050
for (int i = 0; i < 320; i++)51

{52
q.Enqueue(0);53
}54
myDic2.Add(id, q);55
//一共多少个对56
num++;57
}58
//初始化数组,数组初始化时为0.bool数组初始化时为False59
intArray=new int[num];60
boolArray = new bool[num];61
fs.Close();62
return;63
}64

65

/**//// <summary>66
/// 对相应的sno以及。收上来的四个数据进行相应的处理67
/// </summary>68
static void Data(int sno, int data1, int data2, int data3, int data4)69

{70
bool myBool;71

72
//获取四个数字的平均值73
int average = (data1 + data2 + data3 + data4) / 4;74
75
//获取id,及id处的队列76
int id=myDic1[sno];77
Queue<int> q=myDic2[id];78
intArray[id] = average;79

80
//如果nu进行了两遍,就把nu变为0。判断是否已经两遍。循环进行了两次判断。81
if (nu2 == 2 * num)82

{83
nu2 = 0;84
myBool = Logic(average, id);85
}86
else87

{88
myBool = Logic(average, id);89
}90

91
if (myBool)92

{93
//移除末尾处的四个值94
for (int i = 0; i < 4; i++)95

{96
q.Dequeue();97
}98

99
//向队列插入四个值100
q.Enqueue(data1);101
q.Enqueue(data2);102
q.Enqueue(data3);103
q.Enqueue(data4);104
}105
}106

107
static bool Logic(int average,int id)108

{ 109

110
//初始化时先录三个数据,然后再进行相应的逻辑。111
//int nu = 0;112
if (init <= 3*num)113

{114
//初始化工作。先录三个数据115
init++;116
return true; 117
}118
else119

{120
//判断是否已经出错121
if (!boolArray[id])122

{123
if (nu2 < num)124

{125
nu2++;126
return true;127
}128
else129

{130
nu2++;131
//逻辑判断132
return true;133
} 134
}135
else136

{137
nu2++;138
return false; 139
}140
}141
}142
}
浙公网安备 33010602011771号