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 |
或者,您可以使用列表-列表的优点是,在实例化列表时不需要知道数组的大小。
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
如果你是用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可以简化
结果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 |
注意,这个数组是一个密集的数组,它是一个400字节的连续块,您可以在其中放置东西。如果需要动态调整大小的数组,请使用list
1 2 3 4 5 |
int[]和list
只是一种不同的方法:
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概述的给定位置,但我建议使用
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(); |
如果您不知道数组的大小,或者已经有了要添加到的现有数组。你可以从两个方面着手。第一种是使用通用的
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
这两种方法都允许您动态地进行操作。如果您要添加很多项目,那么只需使用
蜱虫时代:
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 |
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.*/ } |