- 在步骤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);
}
}
}
}
在我看来你对字典的理解是颠倒的。您使用键来检索值,而不是反过来。如果希望用户输入组名(金、银、铜),然后输入要添加到该组的人的姓名,则应该让字典将字符串(组名)映射到成员列表
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#是旧的
我们不需要将修改后的list重新赋值到字典值中。步骤2是多余的。当您从步骤#1检索列表时。它返回一个指向字典中列表的指针(引用)。这意味着,当你在list变量中插入一个项时,字典中的列表被更新(添加新项)。
同样,在步骤#3中,你得到了r
,但没有使用。