我正在使用C#/.NET 4.5编写一个应用程序,我定义了一个字典,就像这样:
我的整数键是连续且唯一的,除了空字符串之外,我的值也将是唯一的。例如:
当我有一个新的字符串要添加到字典中时,我需要将其分配给其中一个值为(空字符串)的键。理想情况下,我希望在第一次出现这样的键时就这样做。目前,我正在按以下方式循环遍历我的字典:
这样做可以,但是否有更好(或更快)的方法来完成同样的事情?如果这确实是最好的方法,是否可能将其缩短为一个LINQ表达式?
编辑--------------------------------------------------
我忘记了可能需要解释的重要内容。加载到我的字典中的值实际上是从由固定长度的字节数组组成的二进制文件中加载的,该文件包含ASCII字符串。文件总共将始终由5000000个字节或100000个总字符串@每个50个字节组成。文件结构是由将使用该文件的设备上的某些硬件限制确定的。因此,我的字典中每个KeyValuePair的键实际上用于确定我需要写入任何更改的文件中的偏移量。例如,使用键4,然后将其乘以50到200字节的起始偏移量。然后在该位置写回修改后的字符串。对于在原始帖子中省略此信息,我感到抱歉。
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)
当我有一个新的字符串要添加到字典中时,我需要将其分配给其中一个值为(空字符串)的键。理想情况下,我希望在第一次出现这样的键时就这样做。目前,我正在按以下方式循环遍历我的字典:
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,然后将其乘以50到200字节的起始偏移量。然后在该位置写回修改后的字符串。对于在原始帖子中省略此信息,我感到抱歉。