c# - 在具有特定值的字典中获取第一个 KeyValuePair

标签 c# .net dictionary iteration key-value

我正在用 C#/.NET 4.5 编写一个应用程序,我有一个定义如下的字典:

Dictionary<int, string> d = new Dictionary<int, string>();

我的整数键是连续且唯一的,除了空字符串外,我的值也将是唯一的。例如:

Key     Value
  0     AAAAAAAAAA
  1     BBBBBB
  2     (empty string)
  3     CCCCCCCCCCCCCCCCCCCCCCCC
  4     DDDDDDDDDDDDDDD
  5     EEEEEEEEEEEEEEEEEEE
  6     (empty string)

当我有一个新字符串要添加到字典中时,我需要将它分配给值为(空字符串)的键之一。理想情况下,我想在此类 key 的第一个实例中执行此操作。我目前正在像这样循环浏览我的字典:

int keyNumber;

foreach (KeyValuePair<int, string> pair in d)
{
    if (pair.Value == string.Empty)
    {
        keyNumber = pair.Key;
        break;
    }
}

d[keyNumber] = "new string goes here!";

这行得通,但是否有更好(或更快)的方法来完成同样的事情?如果这实际上是最好的方法,是否可以将其缩短为 LINQ 表达式?

编辑-------------------------------------------- --------------------------------

我遗漏了可能需要解释的重要内容。加载到我的字典中的值实际上是从一个二进制文件加载的,该文件由包含 ASCII 字符串的固定长度字节数组组成。该文件将始终包含 5000000 个字节或 100000 个字符串,每个字符串 50 个字节。文件结构由将使用该文件的设备上的一些硬件限制决定。因此,我字典中每个 KeyValuePair 的键实际上用于确定文件中的偏移量,当用户完成更改时,我需要在其中写入任何更改。例如,使用 4 的 key ,然后乘以 50 得到 200 字节的起始偏移量。然后我将修改后的字符串写回到那个位置。很抱歉在我原来的帖子中忽略了这一点。

最佳答案

d[d.FirstOrDefault(x => string.IsNullOrEmpty(x.Value)).Key] = "My String";

然而,字典实际上是为了存储真正的键值对。列表听起来更适合您的情况,因为您似乎只需要存储值。即便如此,列表元素仍然可以通过索引访问,并且您可以包含空元素,因此(根据您所说的)似乎没有理由坚持使用字典。

关于c# - 在具有特定值的字典中获取第一个 KeyValuePair,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13827067/

相关文章:

.net - 使用多个模板的 WPF 控件创作

list - 将列表元素与其索引相关联的 Pythonic 方式

c# - 在 C# 中使用变量等待和线程安全

c# - 如何设置ServiceStack ResponseStatus StatusCode?

c# - WPF 使用 .Net 3.1 - Process.Start Excel 文件错误 : "The specified executable is not a valid application for this OS platform."

c++ - 错误 : expected ‘,’ or ‘...’ before ‘>’ token

python - 如何在 Python 的 json 文件中将键与嵌套级别连接起来?

C# 委托(delegate)服务器客户端示例

c# - 空条件运算符

.net - Chunky 界面含义