如何将字典内容写入文本文件

时间:2015-04-22 07:13:43

标签: c# dictionary

我已经宣布了下面的字典 -

Dictionary<int, string> dic = new Dictionary<int, string>()
{
       {977,"String1"}, 
       {1021,"String2"},
       {784,"String3"},
       {801, "String4"}
};

在我的textfile中,值将包含这样的内容 -

977,"String1", 
1021,"String2",
784,"String3",
801, "String4"

我想在文本文件中手动存储上面的字典键和值,并希望通过for循环访问类似字典。

喜欢这个 -

foreach (KeyValuePair<int, string> pair in dic)
{
      if (pair.Key == any_integer_value_to_compare)
      {
           Console.WriteLine(pair.Value);
      }
}

我该怎么做?

2 个答案:

答案 0 :(得分:1)

您可以使用序列化/反序列化来存储和检索XML文件中的字典数据。就性能而言,它是更好的方法。

以下是如何实现这一点:

声明课程项目:

public class item
{
  [XmlAttribute]
  public int id;

  [XmlAttribute]
  public string value;
}

您的词典:

Dictionary<int, string> dict = new Dictionary<int, string>()
{
   {977,"String1"}, 
   {1021,"String2"},
   {784,"String3"},
   {801, "String4"}
};

创建序列化程序对象:

XmlSerializer serializer = new XmlSerializer(typeof(item[]),newXmlRootAttribute() { ElementName = "items" });  

<强>序列化

serializer.Serialize(stream,dict.Select(kv=>new item(){id = kv.Key,value=kv.Value}).ToArray() );

<强>反序列化

var myDict = ((item[])serializer.Deserialize(stream)).ToDictionary(i =>i.id, i => i.value);

访问字典值

foreach (KeyValuePair<int, string> pair in myDict )
{
  if (pair.Key == any_integer_value_to_compare)
   {
     Console.WriteLine(pair.Value);
   }
}

通过这种方式,您可以系统地将字典值的状态存储在特定实例中,稍后通过反序列化XML文件来访问它。

答案 1 :(得分:0)

创建或覆盖CSV文件(注意:没有空格和引号

  977,String1
  1021,String2
  784,String3
  801,String4

你可以使用Linq

File.WriteAllLines(@"C:\MyTest\MyFile.txt", dic
  .Select(pair => String.Join(",", pair.Key, pair.Value)));

如果要为值添加引号,请添加它们(最简单的实现)

File.WriteAllLines(@"C:\MyTest\MyFile.txt", dic
  .Select(pair => String.Join(",", pair.Key, "\"" + pair.Value + "\"")));

你不能在行

之后添加空格
  {801, "String4"}, 

完全等于

  {801,"String4"}, 

如果您想将字典转换为String(然后将其合并 与其他一些文本按顺序放入文本文件中):

String text = String.Join(Environment.NewLine, dic
  .Select(pair => String.Join(",", pair.Key, pair.Value))