将值添加到C#数组

Adding values to a C# array

这可能是一个非常简单的方法-我从C开始,需要向数组中添加值,例如:

1
2
3
4
5
6
int[] terms;

for(int runs = 0; runs < 400; runs++)
{
    terms[] = runs;
}

对于那些使用过PHP的人,下面是我在C中要做的:

1
2
3
4
$arr = array();
for ($i = 0; $i < 10; $i++) {
    $arr[] = $i;
}


你可以这样做-

1
2
3
4
5
int[] terms = new int[400];
for (int runs = 0; runs < 400; runs++)
{
    terms[runs] = value;
}

或者,您可以使用列表-列表的优点是,在实例化列表时不需要知道数组的大小。

1
2
3
4
5
6
7
8
List<int> termsList = new List<int>();
for (int runs = 0; runs < 400; runs++)
{
    termsList.Add(value);
}

// You can convert it back to an array if you would like to
int[] terms = termsList.ToArray();

编辑:a)对于list上的循环比list上的foreach循环便宜2倍以上,b)array上的循环比list上的循环便宜2倍左右,c)array上使用for的循环比使用foreach的list上的循环便宜5倍(我们大多数人都这样做)。


如果你是用C 3写的,你可以用一行字来写:

1
int[] terms = Enumerable.Range(0, 400).ToArray();

此代码段假定文件顶部有System.Linq的using指令。

另一方面,如果您正在寻找可以动态调整大小的东西,就像PHP的情况一样(我从未真正了解它),那么您可能希望使用列表而不是int[]。下面是该代码的外观:

1
List<int> terms = Enumerable.Range(0, 400).ToList();

但是,请注意,不能通过将terms[400]设置为值来简单地添加401元素。相反,您需要调用add(),如下所示:

1
terms.Add(1337);


使用Linq的方法concat可以简化

1
2
3
int[] array = new int[] { 3, 4 };

array = array.Concat(new int[] { 2 }).ToArray();

结果3、4、2


这里提供了有关如何使用数组进行此操作的答案。

然而,C有一个非常方便的东西叫做System.Collections:。

集合是使用数组的奇特替代品,尽管许多集合在内部使用数组。

例如,C有一个名为list的集合,其功能与PHP数组非常相似。

1
2
3
4
5
6
7
8
9
using System.Collections.Generic;

// Create a List, and it can only contain integers.
List<int> list = new List<int>();

for (int i = 0; i < 400; i++)
{
   list.Add(i);
}


使用列表作为中介是最简单的方法,正如其他人所描述的那样,但是由于您的输入是一个数组,并且您不想将数据保存在列表中,所以我认为您可能关心性能。

最有效的方法可能是分配一个新数组,然后使用array.copy或array.copyto。如果您只想在列表末尾添加一个项目,这并不难:

1
2
3
4
5
6
7
8
9
10
11
public static T[] Add<T>(this T[] target, T item)
{
    if (target == null)
    {
        //TODO: Return null or throw ArgumentNullException;
    }
    T[] result = new T[target.Length + 1];
    target.CopyTo(result, 0);
    result[target.Length] = item;
    return result;
}

如果需要的话,我还可以发布将目标索引作为输入的插入扩展方法的代码。它有点复杂,使用静态方法数组。复制1-2次。


根据Thracx的答案(我没有足够的分数来回答):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public static T[] Add<T>(this T[] target, params T[] items)
    {
        // Validate the parameters
        if (target == null) {
            target = new T[] { };
        }
        if (items== null) {
            items = new T[] { };
        }

        // Join the arrays
        T[] result = new T[target.Length + items.Length];
        target.CopyTo(result, 0);
        items.CopyTo(result, target.Length);
        return result;
    }

这允许向数组中添加不止一个项,或者只传递一个数组作为参数来联接两个数组。


您必须首先分配数组:

1
2
3
4
5
int [] terms = new int[400]; // allocate an array of 400 ints
for(int runs = 0; runs < terms.Length; runs++) // Use Length property rather than the 400 magic number again
{
    terms[runs] = value;
}

1
2
3
4
5
6
7
8
9
10
11
int ArraySize = 400;

int[] terms = new int[ArraySize];


for(int runs = 0; runs < ArraySize; runs++)
{

    terms[runs] = runs;

}

这就是我编码的方法。


C数组是固定长度的,并且总是索引。使用莫蒂的解决方案:

1
2
3
4
5
int [] terms = new int[400];
for(int runs = 0; runs < 400; runs++)
{
    terms[runs] = value;
}

注意,这个数组是一个密集的数组,它是一个400字节的连续块,您可以在其中放置东西。如果需要动态调整大小的数组,请使用list

1
2
3
4
5
List<int> terms = new List<int>();
for(int runs = 0; runs < 400; runs ++)
{
    terms.Add(runs);
}

int[]和list都不是关联数组——这将是C中的字典<>。数组和列表都很密集。


只是一种不同的方法:

1
2
3
4
5
6
7
8
int runs = 0;
bool batting = true;
string scorecard;

while (batting = runs < 400)
    scorecard +="!" + runs++;

return scorecard.Split("!");


不能简单地将元素添加到数组中。您可以将元素设置为fallen888概述的给定位置,但我建议使用ListCollection,如果需要将其转换为数组,请使用ToArray()


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int[] terms = new int[10]; //create 10 empty index in array terms

//fill value = 400 for every index (run) in the array
//terms.Length is the total length of the array, it is equal to 10 in this case
for (int run = 0; run < terms.Length; run++)
{
    terms[run] = 400;
}

//print value from each of the index
for (int run = 0; run < terms.Length; run++)
{
    Console.WriteLine("Value in index {0}:\t{1}",run, terms[run]);
}

Console.ReadLine();

/*Output:

Value in index 0: 400

Value in index 1: 400

Value in index 2: 400

Value in index 3: 400

Value in index 4: 400

Value in index 5: 400

Value in index 6: 400

Value in index 7: 400

Value in index 8: 400

Value in index 9: 400

*/


如果您确实需要一个数组,那么下面的内容可能是最简单的:

1
2
3
4
5
6
7
8
9
10
11
using System.Collections.Generic;

// Create a List, and it can only contain integers.
List<int> list = new List<int>();

for (int i = 0; i < 400; i++)
{
   list.Add(i);
}

int [] terms = list.ToArray();

如果您不知道数组的大小,或者已经有了要添加到的现有数组。你可以从两个方面着手。第一种是使用通用的List:为此,您需要将数组转换为var termsList = terms.ToList();并使用add方法。完成后,使用var terms = termsList.ToArray();方法转换回数组。

1
2
3
4
5
6
7
var terms = default(int[]);
var termsList = terms == null ? new List<int>() : terms.ToList();

for(var i = 0; i < 400; i++)
    termsList.Add(i);

terms = termsList.ToArray();

第二种方法是调整当前数组的大小:

1
2
3
4
5
6
7
8
9
10
11
var terms = default(int[]);

for(var i = 0; i < 400; i++)
{
    if(terms == null)
        terms = new int[1];
    else    
        Array.Resize<int>(ref terms, terms.Length + 1);

    terms[terms.Length - 1] = i;
}

如果您使用.NET 3.5 Array.Add(...);

这两种方法都允许您动态地进行操作。如果您要添加很多项目,那么只需使用List。如果只是几个项目,那么调整数组的大小会有更好的性能。这是因为您在创建List对象时受到了更多的打击。

蜱虫时代:

3项

Array Resize Time: 6

List Add Time: 16

400项

Array Resize Time: 305

List Add Time: 20


1
2
3
4
5
6
7
8
            /*arrayname is an array of 5 integer*/
            int[] arrayname = new int[5];
            int i, j;
            /*initialize elements of array arrayname*/
            for (i = 0; i < 5; i++)
            {
                arrayname[i] = i + 100;
            }

1
2
3
4
5
6
int[] terms = new int[400];

for(int runs = 0; runs < 400; runs++)
{
    terms[runs] = value;
}


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
         static void Main(string[] args)
        {
            int[] arrayname = new int[5];/*arrayname is an array of 5 integer [5] mean in array [0],[1],[2],[3],[4],[5] because array starts with zero*/
            int i, j;


          /*initialize elements of array arrayname*/
            for (i = 0; i < 5; i++)
            {
                arrayname[i] = i + 100;
            }

             /*output each array element value*/
            for (j = 0; j < 5; j++)
            {
                Console.WriteLine("Element and output value [{0}]={1}",j,arrayname[j]);
            }
            Console.ReadKey();/*Obtains the next character or function key pressed by the user.
                                The pressed key is displayed in the console window.*/

        }