【问题标题】:Adding column to string array将列添加到字符串数组
【发布时间】:2014-07-14 23:36:50
【问题描述】:

我有一个 125 列的字符串数组:

string[] arrColumns = null;
...populate array here
field0 = arrColumns[0];
field1 = arrColumns[1];
...etc to 124
...modify array here to add a new column to the beginning of the string array

我需要在数组的开头添加一个新列。

这样 arrColumns[0] 被移动到 arrColumns[1]; ETC 然后我将有一个新列 arrColumns[0] 来添加数据。 这可以在 C# 中轻松完成吗?先谢谢了。

【问题讨论】:

  • 听起来你想要List<string> 而不是string[]...然后你可以插入任何你喜欢的地方。
  • 最简单的方法是反向遍历所有字段(从 124 到 0),将它们移动 1(从 125 到 1),然后将新列添加到 arrColumn[0 ]。或者您可以使用数组操作来创建一个新数组,定义 arrColumns[0],然后附加您的旧数组。

标签: c#


【解决方案1】:

最接近您所描述的方法是使用Array.Copy 方法:

string[] arrColumns = new string[1024];
string[] newArray = new string[arrColumns.Length + 1];

Array.Copy(arrColumns, 0, newArray, 1, arrColumns.Length);
newArray[0] = "Hello, world!

这有点啰嗦,尤其是如果你继续这样做的话。更好的选择是不用担心在第一个位置复制和插入值的细节,使用List<T> 并从那里开始。

有 3 个选项可以改善这一点:

  1. 使用带有容量的List<T>
  2. 在原始数组中使用List<T>
  3. 从现有数组创建List<T>

使用带有容量的List<T>

使用List<string> 接受构造函数中的容量,以便您在可能的情况下对要创建的大小进行提醒。

然后它将在内部分配初始大小,但仍然知道.Count 中存储的项目数,而不是.Capacity。它也在动态扩展:

List<string> listOfColumns = new List<string>(1024); // Set initial capacity
listOfColumns.Add( .... );

在原始数组中使用List&lt;T&gt;

另一种选择是将数组直接传递给构造函数,您可以使用重载将现有数组传入:

List<string> listOfColumns = new List<string>(arrColumns);

从现有数组创建List&lt;T&gt;

使用 System.Linq 扩展自动创建List&lt;T&gt;

List<string> listOfColumns = arrColumns.ToList();

然后你可以在列表的开头插入一个项目。

listOfColumns.Insert(0, "Hello, World!");

要将数据作为数组获取,请使用.ToArray() 方法。

string[] arrColumns = listOfColumns.ToArray();

【讨论】:

    【解决方案2】:

    您可以复制到List&lt;string&gt;...

    string[] strArray = new string[99];
    strArray[0] = "1";
    strArray[1] = "2";
    strArray[2] = "3";
    
    var strList = new List<string>();
    strList.Add("0");
    strList.AddRange(strArray.Where(a => !string.IsNullOrWhiteSpace(a)));
    

    这将使用您在第一个位置添加的任何内容创建一个新列表,然后从元素不为空的数组中添加记录。

    【讨论】:

      【解决方案3】:

      如果它应该是一个数组,你可以使用它

      // Create a temporary array
      string[] tmp = (string[])arrColumns.Clone();
      
      // Take the first items and copy to temp
      arrColumns.Take(arrColumns.Length-1).ToArray().CopyTo(tmp, 1);
      
      // Add new element at position 0
      tmp[0] = "New";
      
      // Copy back
      tmp.CopyTo(arrColumns);
      

      这会将您的数据移动到最后一个位置并删除最后一个条目。数组的大小不会改变。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-12-28
        • 1970-01-01
        • 1970-01-01
        • 2012-12-15
        • 2011-04-03
        • 2015-02-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多