簡體   English   中英

在 C# 中的字典中的列表中添加數據

[英]Adding Data in List inside a Dictionary in C#

  • 在第 1 步中,我編寫了這段代碼來訪問預先存在的列表並在其中添加值。
  • 在第 2 步中,我用新列表更新了字典。
  • 在第 3 步中,我必須再次訪問字典中的列表以打印結果。

是否有任何過程或快捷方式可以直接在字典內向這個預先存在的列表添加新值而不更新它?

只需要在Main里面寫代碼。 Rest 在編譯器中被硬編碼且無法更改。 您的幫助將不勝感激。 歡迎提出建議:)

using System;
using System.Collections.Generic;

namespace AddNewMember             
{
    public class Club         
    {

        static Dictionary<int, string> groupInfo = new Dictionary<int, string>() { { 1, "Gold" }, { 2, "Silver" }, { 3, "Platinum" } };
        static Dictionary<int, List<String>> memberInfo = new Dictionary<int, List<String>>() {
                                    { 1, new List<string>(){ "Tom","Harry"} },
                                    { 2,new List<string>(){ "Sam","Peter"} },
                                    { 3,new List<string>(){ "Kim","Robert"} } };

        public static void Main(string[] args)        
        {
        //Write your code here. Above part is hardcoded can't be changed
            Console.WriteLine("Group Name :");
            string gName = Console.ReadLine();
            int num = 0;

            foreach (KeyValuePair<int, string> VARIABLE in groupInfo)
            {
                if (VARIABLE.Value == gName)
                {
                    num = VARIABLE.Key;
                }
            }

            Console.WriteLine("Member Name:");
            string name = Console.ReadLine();


        //Step 1
            List<string> l = memberInfo[num];
            l.Add(name);

        //Step 2
            memberInfo[num] = l;

       //Step 3
            List<string> r = memberInfo[num];
            foreach (var VARIABLE in r)
            {
                Console.WriteLine(VARIABLE);
            }

        }
    }
}

在我看來你對字典的理解是顛倒的。 您使用鍵來檢索值,而不是相反。 如果您希望讓用戶輸入組名(金牌、銀牌、銅牌),然后輸入要添加到該組的人的姓名,則應將字典 map 設為成員列表的字符串(組名)

static Dictionary<string, List<String>> groupInfo = new() { 
  { "Gold", new(){ "Tom","Harry" } },
  { "Silver", new(){ "Sam","Peter"} },
  { "Platinum", new(){ "Kim","Robert"} }
};

public static void Main(string[] args)        
{
    Console.WriteLine("Group Name :");
    string gName = Console.ReadLine();
        
    Console.WriteLine("Member Name :");
    string mName = Console.ReadLine();
        
    groupInfo[gName].Add(mName);

}

是的,就是這樣。 GroupInfo 將字符串組名稱映射到字符串成員名稱列表,調用groupInfo[gName]解析為字符串列表,因此在列表上執行 Add 方法調用並添加給定的成員名稱

旁注,我正在利用最近 c# 的一項功能,您不必在 = 的兩邊重復類型名稱。 編譯器會知道 groupInfo 是一個Dictionary<string, List<string>>並且當它在初始化程序中出現new()時它知道我的意思是new List<string>這確實可以幫助整理東西。 括號是必要的,否則它會認為我正在嘗試制作匿名類型,這是另一回事。 如果您遇到編譯器錯誤,如果您的 c# 較舊,您可能必須恢復類型名稱

我們不需要將修改后的列表重新分配給字典值。 步驟#2 是多余的。 當您從步驟 #1 中檢索列表時。 它返回一個指針(引用)到字典中的列表。 這意味着,當您執行將項目插入列表變量時,字典中的列表會更新(添加新項目)。

此外,在第 3 步中,您將獲得r但未使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM