【问题标题】:Arbitrary-sized string arrays in C#C#中的任意大小的字符串数组
【发布时间】:2010-02-25 14:31:25
【问题描述】:

我想定义一个字符串数组,但我不知道需要在其中存储多少个字符串。我可以定义这样一个数组吗?如何在其中插入字符串?

【问题讨论】:

    标签: c# arrays string


    【解决方案1】:

    像这样更好地使用列表:

    List<string> names = new List<string>();
    names.Add(name); ///whatever string you want to insert
    

    稍后如果您需要名称数组,请调用:

    string[] arr = names.ToArray();
    

    如果您必须使用字符串数组,那么您应该预先知道大小。如果你不知道大小,那么你可以初始化一些默认长度的数组(比如 10)。 你必须做的事情是:

    • 保留已添加到数组中的字符串计数
    • 如果它达到默认长度,您已经用更大的长度(比如 15)重新初始化数组,并将所有现有字符串复制到这个新数组中。
    • 您必须检查此数组的边界,您不想从尚未使用的索引中读取(即,如果索引大于计数)

    所以最好使用列表而不是自己做所有这些事情

    【讨论】:

      【解决方案2】:

      您可以使用List&lt;string&gt;,它会随着您向其中添加项目而扩展。

      List<string> myList = new List<string>();
      myList.Add("string1");
      myList.Add("string2");
      

      如果需要,它可以很容易地转换为数组:

      string[] stringArray = myList.ToArray();
      

      如果您不知道需要的确切项目数,数组可能不是一个好的选择,因为您需要调整它的大小(这是一项昂贵的操作)。

      【讨论】:

      • +1 是最明显的答案,尽管您应该添加如何添加项目,因为 Gold 明确要求它:)
      • @OregonGhost - 走在你前面;)
      【解决方案3】:

      我会使用 List 类。您可以根据需要添加尽可能多的内容,而无需知道要放多少。如果您确实对列表中的内容有所了解,可以使用List 的构造函数的容量参数来防止性能问题。

      int capacity = 3;
      var listOfNames = List<string>(/* optional */ capacity);
      listOfNames.Add("My Name 1");
      listOfNames.Add("My Name 2");
      listOfNames.Add("My Name 3");
      
      var namesArray = listOfNames.ToArray();
      

      我在其中添加了namesArray 行,以防您出于某种原因确实需要一个数组而不是列表。

      请参阅this page,了解您可以使用List 做什么。

      【讨论】:

        【解决方案4】:

        您可以使用以下内容,如上面(或下面)提到的 Oded,添加项目时它会自动展开。

        List<String> l = new List<String>();
        
        l.Add("your string here");
        

        ...如果你想迭代,那么:

        foreach(string i in l)
        {
           // Do something with each item (i);
        }
        

        ...还有一个数组:

        String[] a =
             l.ToArray();
        

        【讨论】:

          【解决方案5】:

          使用List&lt;T&gt;。例如

          var list = new List<string>();
          list.Add("string1");
          

          如果你需要列表是一个数组,List&lt;T&gt; 有一个ToArray() 方法。

          在内部List&lt;T&gt; 将数据存储为字符串数组。当需要更多空间时,它将分配一个两倍于当前大小的新数组并将所有引用复制到新数组。 IE。您无需执行任何操作,但如果代码对性能至关重要,您可能希望在创建列表时提供默认容量。

          【讨论】:

            【解决方案6】:

            ArrayList 也可以解决问题。

            ArrayList alist = new ArrayList();

            alist.Add(String1); alist.Add(String2)

            【讨论】:

              猜你喜欢
              • 2010-12-07
              • 2020-10-18
              • 1970-01-01
              • 2014-04-24
              • 1970-01-01
              • 2015-04-25
              • 2015-11-27
              • 2023-03-07
              • 1970-01-01
              相关资源
              最近更新 更多