如何在c#的元组列表中添加不同的值

本文关键字:添加 元组 列表 | 更新日期: 2023-09-27 18:13:06

我正试图在具有元组列表但键相同的字典中添加值。

我是这样做的

public struct MyStruct { public List> list1; }
public static Dictionary<long, MyStruct> myDictionary = new  
                                              Dictionary<long, MyStruct>();
funct()
{
    if (myDictionary.ContainsKey(key))
    {
         myDictionary[key]= new MyStruct { list1 = s.list1 };
    } // this block is been called from another function
}

但是当我每次使用新关键字时,值都会被覆盖。但我想补充一下,因为我没有别的办法了。请给我建议另一种方法。我在网上找遍了,但没有一个能解决我的问题。

如何在c#的元组列表中添加不同的值

代替每次使用new关键字,您可以检查null,然后向结构内部的列表添加值:

funct(){
if (myDictionary.ContainsKey(key))
    {
         if(myDictionary[key].list1 != null) 
              myDictionary[key].list1.AddRange(s.list1);
         else myDictionary[key].list1 = new MyStruct { list1 = s.list1 };
    } // this block is been called from another function
}

这样,如果你已经在字典结构的列表中有了值,那么新的值也会被添加到列表中。如果您没有任何值,并且列表只是null,则程序将像现在一样执行并创建一个新列表。

如果你想添加一个值到Dictionary<TKey, TValue>,首先你需要检查键是否已经存在,因为键应该是唯一的,如果键不存在,你可以设置一个值,否则如果键已经存在,那么你使用该键获取值并更新它。看看下面的例子,我希望它能帮助你理解它是如何工作的。您可以在这里执行下面的示例

//Rextester.Program.Main is the entry point for your code. Don't change it.
//Compiler version 4.0.30319.17929 for Microsoft (R) .NET Framework 4.5
using System;
using System.Collections.Generic;
namespace Rextester
{
    public class Program
    {
        public static Dictionary<long, MyStruct> myDictionary = new Dictionary<long, MyStruct>();
        public static void Main(string[] args)
        {
            myDictionary.Add(1, new MyStruct { Numbers = new List<int> { 1, 2} });
            Add(1, 3);
            // printing out the values
            foreach(KeyValuePair<long, MyStruct> number in myDictionary)
            {
                Console.WriteLine("Key: {0}", number.Key);
                Console.WriteLine("Values:");
                for(var i = 0; i < number.Value.Numbers.Count; i++)
                {
                    Console.WriteLine(number.Value.Numbers[i]);
                }
            }
        }
        public static void Add(long key, int number)
        {
            if (myDictionary.ContainsKey(key))
            {
                var myStruct = myDictionary[key];
                if (myStruct.Numbers != null)
                {
                    myStruct.Numbers.Add(number);
                }
            }
            else
            {
                myDictionary[key] = new MyStruct { Numbers = new List<int> { number }};
            }
        }
    }
    public struct MyStruct
    {
        public List<int> Numbers;
    }
}