【问题标题】:how can I make string multidimensional array with string keys and values in C#? [duplicate]如何在 C# 中使用字符串键和值创建字符串多维数组? [复制]
【发布时间】:2019-05-09 11:24:08
【问题描述】:

嗨,我怎么能在 c# 中创建这样的数组??: 设置宽度和高度是从文件中加载的

properties["settings"]["width"] = "bbb";
properties["settings"]["height"] = "cccc";

而 dynamic_string_key 是从文件加载的键,我不知道有多少或什么键名和值:)

properties["sets_of_data"][dynamic_string_key]= "lalala";
properties["sets_of_data"][dynamic_string_key]= "lalala";
properties["sets_of_data"][dynamic_string_key]= "lalala";
properties["sets_of_data"][dynamic_string_key]= "lalala";

【问题讨论】:

  • 使用Dictionary<string_FirstOuterKey, Dictionary<string_SecondInnerKey, string>>;但在我看来,最好有一些配置/设置类/对象有两个Dictionary<string, string>,一个用于“设置”块,一个用于“sets_of_data”块。否则,您的代码可能很快就会在两个级别上与所有这些键混淆......
  • FTFY Dictionary<string, Dictionary<string, string>>
  • 您的示例看起来不像数组,您的意思是字典/哈希表?
  • 是的,但 C# 不是 PHP。如果你想坚持 PHP 的做事方式,请使用 PHP。否则,在 C# 中它是字典...
  • 不是“它不喜欢动态字符串键”,而是嵌套字典在你尝试使用时没有初始化。这样做:properties["a"] = new Dictionary<string, string>(); properties["a"][dynamic_string_key] = "lalala"; 注意:只初始化一次,否则你会丢失数据。

标签: c# arrays


【解决方案1】:

C# 中的数组仅允许您通过索引(整数)查找元素,而不是任意字符串。在 C# 中,这是一个 Dictionary<>

你可以使用字典中的字典,但这并不容易:

var data = new Dictionary<string, Dictionary<string, string>>();
data["settings"] = new Dictionary<string, string>();
data["settings"]["width"] = "bbb";

但这似乎过于复杂。如果您知道您将拥有“设置”,那么只有一本用于设置的字典可能更具可读性:

var settings = new Dictionary<string, string>();
settings["width"] = "bbb";

【讨论】:

    【解决方案2】:

    如果您的文件是 JSON,您可以使用 JSON.NET 并这样做

    JObject obj = JObject.Parse(File.ReadAllText("foo.json"));
    var bar = (string)obj["foo"]["bar"];
    

    【讨论】:

      【解决方案3】:

      你可以使用

      Dictionary<string, Dictionary<string, string>> properties =
      Dictionary<string, Dictionary<string, string>>
      {
          {
              "settings",
              new Dictionary<string, string>
              {
                  {"width", "200"},
                  {"height", "150"},
              }
          }
      };  
      

      【讨论】:

        【解决方案4】:

        或者你可以使用元组,尤其是命名元组

        var exampleNamedTuple = (Height: 0, Width: 0, Value: "");
        
        var list = new List<(int Height, int Width, string Value)>();
        list.Add(exampleNamedTuple);
        
        var height = list.First().Height;
        var width = list.First().Width;
        var value = list.First().Value;
        

        然后您可以将其分配给您的设置属性。

        https://docs.microsoft.com/en-us/dotnet/csharp/tuples

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-10-05
          • 2021-04-04
          • 1970-01-01
          • 1970-01-01
          • 2016-05-12
          • 1970-01-01
          • 1970-01-01
          • 2011-08-16
          相关资源
          最近更新 更多