C# 根据索引将空白字符串插入数组

C# 根据索引将空白字符串插入数组,c#,arrays,C#,Arrays,比如说,我有一个数组 string[] A = {"1","2","3","4","5"} 我希望数组的大小为10,并希望在某个索引后插入空白字符串 例如,我可以使其大小为10,并在索引3后插入字符串,这将导致 A = {"1","2","3","4","","","","","","5"} 基本上,给定索引之后的元素将被推到末尾,空白字符串将占据中间的空白 这是我尝试过的,但它只添加了一个字符串,并且没有为数组设置确切的大小 var foos = new List<string>

比如说,我有一个数组

string[] A = {"1","2","3","4","5"}
我希望数组的大小为10,并希望在某个索引后插入空白字符串

例如,我可以使其大小为10,并在索引3后插入字符串,这将导致

A = {"1","2","3","4","","","","","","5"}
基本上,给定索引之后的元素将被推到末尾,空白字符串将占据中间的空白

这是我尝试过的,但它只添加了一个字符串,并且没有为数组设置确切的大小

var foos = new List<string>(A);
foos.Insert(33, "");
foos[32] = "";
A = foos.ToArray();
var foos=新列表(A);
foos.插入(33“”;
foos[32]=“”;
A=foos.ToArray();

以下是基于LINQ的方法:

public string[] InsertToArray(string[] array, int index, int newArrayCapacity)
{
    var firstPart = array.Take(index + 1);
    var secondPart = array.Skip(index + 1);
    var newPart = Enumerable.Repeat(String.Empty, newArrayCapacity - array.Length);
    return firstPart.Concat(newPart).Concat(secondPart).ToArray();
}
以下是该方法的用法:

string[] A = {"1","2","3","4","5"};

// Insert 5 elements (so that A.Length will be 10) in A after 3rd element
var result = InsertToArray(A, 3, 10);


添加:参见Sayse的答案,真正的方法

如果您不介意使用列表而不是数组,您可以这样做:

int index = 3;
int numberOfBlanksToInsert = 5;
List<string> strings = new List<string>();
for (int i = 0; i < numberOfBlanksToInsert; i++)
{
    strings.Insert(index, "");
}

由于数组是固定大小的集合,因此无法调整数组的大小。您需要做的是拆分数组元素,您需要获取指定索引前后的元素,您可以使用
Skip
Take
方法来实现这一点,然后您需要生成一系列空字符串并将它们放在一起:

string[] A = {"1","2","3","4","5"};

int index = 3;

var result = A.Take(index + 1)
              .Concat(Enumerable.Repeat("", 10 - A.Length))
              .Concat(A.Skip(index+1))
              .ToArray();
你可以用

var l=新列表{“1”、“2”、“3”、“4”、“5”};
l、 InsertRange(3,新字符串[10-l.Count]);
foreach(l中的变量i)
控制台写入线(i);
注意:上面的字符串不是空的,而是空值,但是您可以轻松地修改用来填充所需默认值的
新字符串[]

比如,;请参见

静态字符串[]插入范围(字符串[]初始值、整数起始索引、整数计数、字符串到插入)
{
字符串[]结果=新字符串[initialValues.Length+count];
对于(int i=0;i=startIndex+计数?初始值[i-计数]:输入;
返回结果;
}
用法:
InsertRange(A,4,5,“hello”)


输出:“1,2,3,4,您好,您好,您好,您好,您好,5”

这不是一个好答案,他问的是如何插入数组而不是列表。
string[] A = {"1","2","3","4","5"};

int index = 3;

var result = A.Take(index + 1)
              .Concat(Enumerable.Repeat("", 10 - A.Length))
              .Concat(A.Skip(index+1))
              .ToArray();
var l = new List<string>{"1","2","3","4","5"};
l.InsertRange(3, new string[10 - l.Count]);
foreach(var i in l)
    Console.WriteLine(i);
    static string[] InsertRange(string[] initialValues, int startIndex, int count, string toInsert)
    {
        string[] result = new string[initialValues.Length + count];
        for (int i = 0; i < initialValues.Length + count; i++)
            result[i] = i < startIndex ? initialValues[i] : i >= startIndex + count ? initialValues[i - count] : toInsert;
        return result;
    }