[英]How to add multiple values to a single key (Dictionaries in c#)
在這里,我從數據庫中檢索休假類型和休假資料。 每個 leave_type 可能有多個配置文件。 因此,我將休假類型設置為鍵,將個人資料設置為值。 當我運行我的代碼時,我得到一個異常,上面寫着:“已經添加了具有相同鍵的項目。” 請幫忙
Dictionary<String, String> myDictionary = new Dictionary<String, String>();
List<String[]> leave_result_list = new List<String[]>();
StringBuilder leave_builder = new StringBuilder();`
MySqlCommand leave_type_query = new MySqlCommand("SELECT leave_types.description, leave_profile.name FROM leave_types LEFT JOIN leave_profile on leave_types.type_id = leave_profile.leave_type_id", con);
MySqlDataReader leave_type_reader = leave_type_query.ExecuteReader();
while (leave_type_reader.Read())
{
string[] leave_type_and_profiles = new string[2];
leave_type_and_profiles[0] = leave_type_reader.GetString("description");
leave_type_and_profiles[1] = leave_type_reader.GetString("name");
string leave_name = leave_type_and_profiles[0].ToString();
string leave_profile = leave_type_and_profiles[1].ToString();
myDictionary.Add(leave_name, leave_profile);
}
leave_type_reader.Close();
我會改用Lookup
,它像字典一樣工作,但有一組值。
void Main()
{
var lookup = GetTheStuff().ToLookup(x => x.leave_name, x => x.leave_profile)
}
private IEnumerable<(string leave_name, string leave_profile)> GetTheStuff()
{
MySqlCommand leave_type_query = new MySqlCommand("SELECT leave_types.description, leave_profile.name FROM leave_types LEFT JOIN leave_profile on leave_types.type_id = leave_profile.leave_type_id", con);
MySqlDataReader leave_type_reader = leave_type_query.ExecuteReader();
while (leave_type_reader.Read())
{
string[] leave_type_and_profiles = new string[2];
leave_type_and_profiles[0] = leave_type_reader.GetString("description");
leave_type_and_profiles[1] = leave_type_reader.GetString("name");
string leave_name = leave_type_and_profiles[0].ToString();
string leave_profile = leave_type_and_profiles[1].ToString();
yield return (leave_name, leave_profile)
}
leave_type_reader.Close();
}
每個 leave_type 可能有多個配置文件
您最好使用Dictionary<string, List<string>>
然后:
var myDictionary = new Dictionary<string, List<string>>();
while (leave_type_reader.Read())
{
// ...
if(myDictionary.TryGetValue(leave_name, out List<string> profiles))
profiles.Add(leave_profile);
else
myDictionary.Add(leave_name, new List<string>{ leave_profile });
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.