将值添加到C#数组

时间:2008-10-14 21:02:59

标签: c# arrays

可能是一个非常简单的问题 - 我开始使用C#并需要为数组添加值,例如:

int[] terms;

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

对于那些使用过PHP的人来说,这就是我在C#中尝试做的事情:

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

25 个答案:

答案 0 :(得分:732)

你可以这样做 -

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

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

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) for loops on List<T> are a bit more than 2 times cheaper than foreach loops on List<T>, b) Looping on array is around 2 times cheaper than looping on List<T>, c) looping on array using for is 5 times cheaper than looping on List<T> using foreach (which most of us do).

答案 1 :(得分:81)

如果您使用C#3编写,则可以使用单行编写:

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

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

另一方面,如果你正在寻找可以动态调整大小的东西,就像PHP的情况一样(我从来没有真正学过它),那么你可能想要使用List而不是INT []。这是代码的代码:

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

但请注意,您不能通过将术语[400]设置为值来简单地添加第401个元素。你需要调用Add(),如下所示:

terms.Add(1337);

答案 2 :(得分:44)

使用Linq的方法Concat使这个变得简单

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

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

结果 3,4,2

答案 3 :(得分:36)

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

但是,C#有一个非常方便的东西叫做System.Collections:)

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

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

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);
}

答案 4 :(得分:11)

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

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

__m128i

如果需要,我还可以发布一个Insert扩展方法的代码,该方法将目标索引作为输入。它有点复杂,使用静态方法Array.Copy 1-2次。

答案 5 :(得分:10)

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

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;
    }

这允许向数组添加多个项目,或者只是将数组作为参数传递以连接两个数组。

答案 6 :(得分:8)

您必须先分配数组:

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;
}

答案 7 :(得分:5)

int ArraySize = 400;

int[] terms = new int[ArraySize];


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

    terms[runs] = runs;

}

这就是我编码的方式。

答案 8 :(得分:4)

C#数组是固定长度并始终编入索引。使用Motti的解决方案:

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

请注意,此数组是一个密集数组,一个400字节的连续块,您可以放弃它。如果需要动态大小的数组,请使用List&lt; int&gt;。

List<int> terms = new List<int>();
for(int runs = 0; runs < 400; runs ++)
{
    terms.Add(runs);
}

既不是int []也不是List&lt; int&gt;是一个关联数组 - 这将是一个字典&lt;&gt;在C#中。数组和列表都很密集。

答案 9 :(得分:3)

一种方法是通过LINQ填充数组

如果要用一个元素填充数组 你可以简单地写

string[] arrayToBeFilled;
arrayToBeFilled= arrayToBeFilled.Append("str").ToArray();

此外,如果您想用多个元素填充数组,则可以使用 循环中的先前代码

//the array you want to fill values in
string[] arrayToBeFilled;
//list of values that you want to fill inside an array
List<string> listToFill = new List<string> { "a1", "a2", "a3" };
//looping through list to start filling the array

foreach (string str in listToFill){
// here are the LINQ extensions
arrayToBeFilled= arrayToBeFilled.Append(str).ToArray();
}

答案 10 :(得分:3)

只是一种不同的方法:

int runs = 0; 
bool batting = true; 
string scorecard;

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

return scorecard.Split("!");

答案 11 :(得分:2)

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();
  

/ *输出:

     

索引0:400中的值   
指数1:400的价值   
指数2:400的价值   
指数3:400的价值   
指数4:400的价值   
指数5:400的价值   
指数值6:400   
指数7:400的价值   
指数8:400的价值   
指数9:400的价值   
* /

答案 12 :(得分:2)

您不能轻易地将元素添加到数组中。您可以将元素设置为给定位置 fallen888 ,但我建议使用List<int>Collection<int>,如果需要,请使用ToArray()它转换成一个数组。

答案 13 :(得分:1)

如果你真的需要一个数组,以下几乎是最简单的:

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();

答案 14 :(得分:1)

如果您不知道数组的大小,或者您已经添加了现有数组。你可以通过两种方式解决这个问题。第一个是使用通用List<T>: 为此,您需要将数组转换为var termsList = terms.ToList();并使用Add方法。然后,完成后使用var terms = termsList.ToArray();方法转换回数组。

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();

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

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<T>。如果它只是几个项目,那么它将有更好的性能调整阵列大小。这是因为您创建List<T>对象会受到更多打击。

刻度线

时间

3项

  

数组调整大小时间:6

     

列出添加时间:16

400件

  

数组调整大小时间:305

     

列出添加时间:20

答案 15 :(得分:1)

到2019年,您可以在一行中使用AppendPrependLinQ

using System.Linq;

然后:

terms= terms.Append(21).ToArray();

答案 16 :(得分:0)

您可以通过列表进行操作。这就是方法

List<string> info = new List<string>();
info.Add("finally worked");

如果需要返回此数组,请执行

return info.ToArray();

答案 17 :(得分:0)

对我来说,这似乎少了很多麻烦:

var usageList = usageArray.ToList();
usageList.Add("newstuff");
usageArray = usageList.ToArray();

答案 18 :(得分:0)

您不能直接执行此操作。但是,您可以使用 Linq 来做到这一点:

List<int> termsLst=new List<int>();
for (int runs = 0; runs < 400; runs++)
{
    termsLst.Add(runs);
}
int[] terms = termsLst.ToArray();

如果数组 terms 开头不是空的,则可以先将其转换为 List ,然后再进行处理。喜欢:

    List<int> termsLst = terms.ToList();
    for (int runs = 0; runs < 400; runs++)
    {
        termsLst.Add(runs);
    }
    terms = termsLst.ToArray();

注意:不要错过在文件开始时添加“ 使用System.Linq; ”的功能。

答案 19 :(得分:0)

Array Push Example

NSApp.activate(ignoringOtherApps: true)

答案 20 :(得分:0)

使用C#而不使用ToArray()方法将列表值添加到字符串数组

        List<string> list = new List<string>();
        list.Add("one");
        list.Add("two");
        list.Add("three");
        list.Add("four");
        list.Add("five");
        string[] values = new string[list.Count];//assigning the count for array
        for(int i=0;i<list.Count;i++)
        {
            values[i] = list[i].ToString();
        }

值数组的输出包含:

一个

两个

三个

四个

五个

答案 21 :(得分:0)

我将其添加为另一个变体。我更喜欢这种类型的功能代码行。

Enumerable.Range(0, 400).Select(x => x).ToArray();

答案 22 :(得分:0)

            /*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;
            }

答案 23 :(得分:0)

         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.*/
        }

答案 24 :(得分:0)

int[] terms = new int[400];

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