c# - 高效地更新 .NET 字典中的绑定(bind)

标签 c# .net dictionary f#

我正在使用字典来累积键的出现次数,因此,核心操作是编写一个键值对,其中的值是前一个值加 1,如果没有前一个值,则只加 1。但是,这需要两个单独的字典操作(读取和写入),而我只能执行一个操作 (AddOrUpdate)。

我注意到并发字典支持 AddOrUpdate 但普通的通用 Dictionary 似乎不支持。

因此,对可变整数的引用字典更快。但是,这引入了不必要的引用,这意味着堆分配和写入障碍。所以我猜有可能做得更好,但如果不从头开始重写 Dictionary ,我看不出怎么做。我说得对吗?

最佳答案

你可以这样做:

private class Counter
{
  public string Key       { get ; set ; }
  public int    Frequency { get ; set ; }
}

...

Dictionary<string,Counter> frequencyTable = new Dictionary<string,Counter>() ;

...

string someKey = GetKeyToLookup() ;
Counter item = null ;
bool hit = frequencyTable.TryGetValue( someKey,out item ) ;
if ( !hit )
{
  item = new Counter{ Key=someKey,Frequency=0 } ;
}
++ item.Frequency ;

如果这还不够好,为什么要自己写?使用高性能C5 Collections Library .它是免费的(事实上,最初由微软资助),建立在微软的 System.Collections.Generic 接口(interface)之上,其字典、集合和包支持 FindOrAdd() 语义。

关于c# - 高效地更新 .NET 字典中的绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18471076/

相关文章:

c# - EventHandler 和 ElapsedEventHandler 之间有什么区别?

c# - 将大型 xml 文件插入 xml 列的最佳方法(在远程 SQL Server 上)

c# - 在 C# 中批量更新

java - 使用 java.util.Map 时出现编译问题

python - 通过字典中的值获取具有多个值的键

c# - 如何将防御性编程技术结合在一起?

.net - 安装程序要求安装.NET 4.0,而VS2010只使用3.5

.net - F# 有类似 Haskell 的 where 子句的东西吗?

c# - 缩小文件路径以更易于阅读的功能

python - 创建一个字典的字典