C# 返回字典键,基于值匹配?
我有一个很大的项目表/字典 我想根据匹配的字符串值返回C# 返回字典键,基于值匹配?,c#,dictionary,C#,Dictionary,我有一个很大的项目表/字典 我想根据匹配的字符串值返回Int16键值。我试图根据组合框中选择的字符串自动建议Int16值 我的READ\u TABLE函数没有任何问题,是retrieve\u ival函数给了我问题 我试图根据我从组合框中选择的字符串设置数字updown的值,但我想从字典中获取该值,而不是再次存储我已经存在的值。我在这件事上做错了吗 public static Dictionary<Int16, string> m_ItemLookup = new Dictionar
Int16
键值。我试图根据组合框中选择的字符串自动建议Int16
值
我的READ\u TABLE
函数没有任何问题,是retrieve\u ival
函数给了我问题
我试图根据我从组合框中选择的字符串设置数字updown的值,但我想从字典中获取该值,而不是再次存储我已经存在的值。我在这件事上做错了吗
public static Dictionary<Int16, string> m_ItemLookup = new Dictionary<Int16, string>
{
{ 00, "Handgun"},
{ 01, "Handgun SG"},
{ 02, "Handgun GL" },
{ 03, "Magnum Handgun"},
{ 04, "Magnum Revolver"},
{ 05, "Handgun HP"},
{ 06, "Model 600"},
{ 07, "Revolver"},
{ 08, "Burst Handgun"},
{ 10, "Submachine gun"},
{ 11, "Shotgun"},
{ 12, "Shotgun E"},
{ 13, "Special Hunting Gun"},
{ 14, "Assault Rifle"},
{ 17, "Pill Shooter(White)"},
{ 18, "Pill Shooter(Blue)"},
{ 19, "Mine Detector"},
{ 20, "Rocket Launcher"},
{ 23, "Grenade Launcher (Burst)"},
{ 24, "Grenade Launcher (Flame)"},
{ 25, "Grenade Launcher (Acid)"},
{ 26, "Grenade Launcher (??)"},
{ 27, "Grenade Launcher (BOW GAS)"},
{ 28, "Pesticide Spray"},
{ 29, "Flame Spray"},
{ 30, "Nail Gun"},
{ 31, "Ampoule Shooter"},
{ 100, "Survival Knife"},
{ 101, "Folding Knife"},
{ 102, "Butcher Knife"},
{ 103, "Iron Pipe"},
{ 104, "Curved Iron Pipe"},
{ 105, "Bent Iron Pipe"},
{ 106, "Long Pole"},
{ 107, "Square Timber"},
{ 108, "Stick"},
{ 109, "Axe"},
{ 110, "Scrub Brush"},
{ 111, "Wooden Pole"},
{ 112, "Stick"},
{ 113, "Spear"},
{ 114, "Molotov Cocktail"},
{ 115, "Hammer"},
{ 116, "Crutch"},
{ 117, "Stun Rod"},
{ 118, "Concrete Piece"},
{ 119, "Broken Crutch"},
{ 155, "Empty Bottle"},
{ 157, "Chemical Solvent (green)"},
{ 158, "Yellow Chemical Bottle"},
{ 159, "Gray Chemical Bottle"},
{ 160, "Gray Chemical Bottle"},
{ 200, "Handgun Magazine"},
{ 201, "Handgun SG Magazine"},
{ 202, "Handgun GL Magazine"},
{ 203, "Magnum Clip"},
{ 204, "Revolver Speed Loader"},
{ 205, "Submachine Gun Clip"},
{ 206, "Assault Rifle Clip"},
{ 250, "Handgun Rounds 9mm"},
{ 251, "Magnum HG Rounds"},
{ 252, "Magnum Revolver Rounds"},
{ 253, "Revolver Rounds"},
{ 254, "Shotgun Rounds"},
{ 255, "Rifle Rounds"},
{ 300, "Green Herb" },
{ 301, "Blue Herb" },
{ 302, "Red Herb" },
{ 303, "Green + Green Mixed Herb" },
{ 304, "Green + Green + Green Mixed Herb" },
{ 305, "Green + Red Mixed Herb" },
{ 306, "Green + Blue Mixed Herb" },
{ 307, "Green + Green + Blue Mixed Herb" },
{ 308, "Green + Red + Blue Mixed Herb" },
{ 309, "First Aid Spray" },
{ 310, "Recovery Medicine"},
{ 311, "Hemostat"},
{ 312, "Day Light" },
{ 313, "Blue + Red Mixed Herb"},
{ 314, "Antidote"},
{ 315, "Large Recovery Medicine"},
{ 316, "Anti Virus Pill"},
{ 317, "Large Anti Virus"},
{ 318, "Recovery Medicine Base"},
{ 450, "Lighter"},
{ 451, "Alcohol Bottle"},
{ 452, "Bottle + news Paper"},
{ 453, "Broken Handgun"},
{ 454, "Broken Shotgun"},
{ 455, "Battery"},
{ 456, "Broken Handgun SG"},
{ 12600, "Auxiliary Building Key" },
{ 12601, "Adminstrator's Office Key"},
{ 12602, "Rusty Key"},
{ 12603, "Syringe (empty)"},
{ 12604, "Syringe (Solvent)"},
{ 12605, "Pendant"},
{ 14000, "Bolt Cutters"},
{ 14001, "Elephant Key"},
{ 14002, "Alligator Key"},
{ 14003, "Lion key"},
{ 14004, "Office Key"},
{ 14005, "Mr Racoon Medal"},
{ 14006, "Lion Emblem (Red)"},
{ 14007, "Lion Emblem (Blue)"},
{ 14008, "Blank Tape"},
{ 14009, "Parade BGM Tape"},
{ 14010, "Empty entry"}
};
public void READ_TABLE(string fp, ListView LV, ComboBox CMB, bool f_type, RichTextBox Debug_Log)
{
LV.Items.Clear();
FileStream fs = new FileStream(fp, FileMode.Open);
BinaryReader br = new BinaryReader(fs);
string[] item_names = new string[0];
int null_count = 0;
fs.Seek(0, SeekOrigin.Begin);
TBL_HEADER.tag = br.ReadInt32();
TBL_HEADER.Item_count = br.ReadInt32();
Debug_Log.AppendText("Defined Item Count: " + TBL_HEADER.Item_count.ToString());
if (f_type)
{
TBL_HEADER.Item_count *= 3;
}
Array.Resize(ref TBL_ITEM, TBL_HEADER.Item_count);
Array.Resize(ref item_names, TBL_HEADER.Item_count);
for (int i = 0; i < TBL_HEADER.Item_count; i++)
{
TBL_ITEM[i].Item_val = br.ReadInt16();
TBL_ITEM[i].Quantity = br.ReadByte();
TBL_ITEM[i].occurence = br.ReadByte();
LV.Items.Add(i.ToString());
LV.Items[i].SubItems.Add(TBL_ITEM[i].Item_val.ToString());
if (TBL_ITEM[i].Item_val == -1)
{
null_count +=1;
LV.Items[i].SubItems.Add("Null");
LV.Items[i].ForeColor = Color.DarkRed;
LV.Items[i].Font = new System.Drawing.Font("Lucida Console", 9);
}
if (m_ItemLookup.ContainsKey(TBL_ITEM[i].Item_val))
{ LV.Items[i].SubItems.Add(m_ItemLookup[TBL_ITEM[i].Item_val]);
LV.Items[i].SubItems.Add(TBL_ITEM[i].Quantity.ToString());
LV.Items[i].SubItems.Add(TBL_ITEM[i].occurence.ToString());
}
}
foreach (string item_name in m_ItemLookup.Values) // add dictionary values to combo box
{
CMB.Items.Add(item_name);
}
Debug_Log.AppendText("\n Total null items Read: " + null_count.ToString());
fs.Close();
br.Close();
}
public void retrieve_ival(ComboBox cmb, NumericUpDown Ival, NumericUpDown idx)
{
int set_key;
if (m_ItemLookup.ContainsValue(cmb.SelectedText))
{
Ival.Value = m_itemLookup; //how do i return key? of the matched value?
}
}
publicstaticdictionary m\u ItemLookup=新字典
{
{00,“手枪”},
{01,“手枪SG”},
{02,“手枪GL”},
{03,“万能手枪”},
{04,“万能左轮手枪”},
{05,“手枪HP”},
{06,“600型”},
{07,“左轮手枪”},
{08,“冲锋枪”},
{10,“冲锋枪”},
{11,“猎枪”},
{12,“猎枪E”},
{13,“特殊猎枪”},
{14,“突击步枪”},
{17,“射丸者(白色)”},
{18,“射丸者(蓝色)”},
{19,“地雷探测器”},
{20,“火箭发射器”},
{23,“榴弹发射器(爆炸)”,
{24,“榴弹发射器(火焰)”,
{25,“榴弹发射器(Acid)”,
{26,“榴弹发射器(??”},
{27,“榴弹发射器(弓气)”,
{28,“杀虫剂喷雾”},
{29,“火焰喷射”},
{30,“钉子枪”},
{31,“安瓿枪手”},
{100,“生存刀”},
{101,“折叠刀”},
{102,“屠刀”},
{103,“铁管”},
{104,“曲铁管”},
{105,“弯铁管”},
{106,“长杆”},
{107,“方木”},
{108,“棍子”},
{109,“斧头”},
{110,“刷子”},
{111,“木杆”},
{112,“棍子”},
{113,“矛”},
{114,“莫洛托夫鸡尾酒”},
{115,“锤子”},
{116,“拐杖”},
{117,“电击棒”},
{118,“混凝土件”},
{119,“断拐”},
{155,“空瓶”},
{157,“化学溶剂(绿色)”,
{158,“黄色化学瓶”},
{159,“灰色化学瓶”},
{160,“灰色化学瓶”},
{200,“手枪弹匣”},
{201,“手枪SG弹匣”},
{202,“手枪GL弹匣”},
{203,“万能夹子”},
{204,“转轮速度装载机”},
{205,“冲锋枪夹”},
{206,“突击步枪夹”},
{250,“手枪发射9mm”},
{251,“Magnum HG圆形”},
{252,“万能左轮手枪子弹”},
{253,“左轮手枪子弹”},
{254,“散弹枪子弹”},
{255,“步枪子弹”},
{300,“绿色药草”},
{301,“蓝色药草”},
{302,“红药草”},
{303,“绿色+绿色混合草药”},
{304,“绿色+绿色+绿色混合草药”},
{305,“绿色+红色混合草药”},
{306,“绿色+蓝色混合草药”},
{307,“绿色+绿色+蓝色混合草药”},
{308,“绿色+红色+蓝色混合草药”},
{309,“急救喷雾”},
{310,“康复医学”},
{311,“止血器”},
{312,“白昼”},
{313,“蓝+红混合草药”},
{314,“解药”},
{315,“大型康复医学”},
{316,“抗病毒药丸”},
{317,“大型反病毒”},
{318,“康复医学基地”},
{450,“打火机”},
{451,“酒精瓶”},
{452,“瓶子+报纸”},
{453,“破手枪”},
{454,“破猎枪”},
{455,“电池”},
{456,“破手枪SG”},
{12600,“附属厂房钥匙”},
{12601,“管理员办公室钥匙”},
{12602,“生锈的钥匙”},
{12603,“注射器(空)”},
{12604,“注射器(溶剂)”,
{12605,“吊坠”},
{14000,“螺栓切割机”},
{14001,“象钥匙”},
{14002,“鳄鱼钥匙”},
{14003,“狮子钥匙”},
{14004,“办公室钥匙”},
{14005,“浣熊先生奖章”},
{14006,“狮子徽章(红色)”},
{14007,“狮子徽章(蓝色)”},
{14008,“空白磁带”},
{14009,“游行BGM磁带”},
{14010,“空条目”}
};
public void READ_表(字符串fp、列表视图LV、组合框CMB、bool f_类型、RichTextBox调试日志)
{
LV.Items.Clear();
FileStream fs=newfilestream(fp,FileMode.Open);
BinaryReader br=新的BinaryReader(fs);
字符串[]项目名称=新字符串[0];
int null_计数=0;
fs.Seek(0,SeekOrigin.Begin);
TBL_HEADER.tag=br.ReadInt32();
TBL_HEADER.Item_count=br.ReadInt32();
Debug_Log.AppendText(“已定义项计数:+TBL_头.项计数.ToString());
if(f_类型)
{
TBL_标题。项目_计数*=3;
}
数组。调整大小(参考TBL_项,TBL_头。项计数);
调整数组大小(参考项目名称、TBL\U标题、项目计数);
对于(int i=0;iKeyValuePair<Int16, string> kvp = m_ItemLookup.FirstOrDefault(x => x.Value == desiredStringValue);
if (kvp.Value == null)
{
... no matching key-value pair found
}
int set_key = kvp.Key;