向字典中添加键/值对

13

我正在使用字典来存储一些键值对,并且有一个关于如何填充字典的问题。我需要执行一些其他操作以查找并添加我的键值对到字典中。在这些操作之后,我可能会找到一个要添加到字典中的键/值对,或者可能什么也没有找到。我的问题是如何填充字典。我应该使用一个函数,如果找到键值对则返回一个键值对,否则返回字典中的空键值对,然后使用dictionary.Add(function())调用吗?我不想向字典添加空的键值对,因此我不确定该函数的返回调用如何工作。还是应该将字典传递给函数,如果需要则进行添加?就像:

function(dictionary) 
{ if (pair found) {dictionary.add(pair)}}

1
为什么不使用本地字典<TKey,TValue>? 它已经管理存储,具有用于检查键存在的ContainsKey方法,并且您可以在其上使用LINQ返回KeyValuePair<TKey,TValue>条目。 - Brian Mains
我正在寻找最佳方法来填充一个Dictionary<TKey, TValue>对象。为了填充它,我需要执行一些其他操作来得到要放置在字典中的对象。因此,我应该将这些操作推入一个方法中,并返回一个键值对以添加到字典中吗?还是应该传递新创建的字典并将其传递给函数以添加任何找到的值? - John Baum
这真的取决于您尝试使用此方法做什么,以及它是否应该具备该功能。据我所知,我只需将字典推入其中,然后让方法完成其工作即可。这将是最容易实现的方法。 - Brian Mains
1
使用第二个选项 - 将字典传递给您的方法。我不知道可以传递给字典的add方法的值,这将导致没有添加。 - Ventsyslav Raikov
你的问题留下了很多假设的空间,所以没有好的答案。从我所读到的内容来看,你应该使用更像第二种方法的方式(只有在找到匹配项时才将其添加到字典中),但我仍然认为如果你提供更多细节(比如你正在使用的代码),我们可以进一步优化它。 - senfo
2个回答

22

不确定您在这里询问的内容,但是以下是我如何处理字典以根据键添加或更新值的方法:

string key = "some key here";
string value = "your value";
if (myDict.ContainsKey(key))
{
    myDict[key] = value;
}
else
{
    myDict.Add(key, value);
}

如果你喜欢,可以将这部分内容封装在一个方法中:

void AddOrUpdate(Dictionary<string, string> dict, string key, string value)
{
    if (dict.ContainsKey(key))
    {
        dict[key] = value;
    }
    else
    {
        dict.Add(key, value);
    }
}

//usage:
AddOrUpdate(myDict, "some key here", "your value");

你还可以使用 TryGetValue 方法,但是在这方面没有明显的优势。


2
也许我漏掉了什么,但是dict[key]=value要么添加要么更新值(set调用“private void Insert(TKey key, TValue value, bool add)”)。 - user276648
@user276648,我是那个缺少很多思维的人,你说得完全正确!我曾经在经典 ASP 中使用字典,猜测这种语法就一直保留下来了。请随意发布新答案,让其他人也能了解这种简单的赋值方式。 - Shadow The Spring Wizard

3

您的伪代码是正确的。

public void Process( bool add, Dictionary<string, string> dictionary )
{
   if( add ) dictionary.Add( "added", "value" );
}

你可以使用扩展方法:

你也可以使用扩展方法:

static class Program
{
    public static void AddIfNotNull(this Dictionary<string,object> target, string key, object value )
    {
        if( value != null )
            target.Add( key, value );
    }

    static void Main(string[] args)
    {
        var dictionary = new Dictionary<string, object>( );

        dictionary.AddIfNotNull( "not-added",    null );
        dictionary.AddIfNotNull( "added",       "true" );

        foreach( var item in dictionary )
            Console.WriteLine( item.Key );

        Console.Read( );
    }

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接