我是c#with python background的新手。
在python中,我可以这样做:
a = [1, 5, 10] #initialize
a = [1, 3, 5] #change the value
如何在c#上执行a = {1, 3, 5}
?目前我发现了这种方式。
int[] a = {1, 5, 10}; //initialize
int[] b = {1 ,3, 5}; //create new reference type
a = (int[])b.Clone(); //change the value
有没有更好的方法可以将整个数组a
从{1, 5, 10}
更改为{1 ,3, 5}
?
即。 python上的a = [1, 3, 5]
到C#?
答案 0 :(得分:4)
也许我错过了什么,但肯定只是......
a = new int[]{1, 3, 5};
答案 1 :(得分:1)
是的,您可以使用indexer(基于零)
a[2] = 5;
如果要更改整个数组,请为其指定新引用,例如
int[] a = new[] {1, 2, 10};
a = new[] {1,2,5};
您的原始数组将丢失对它的所有引用并受GC限制。第二行为a
分配对新数组的引用。
答案 2 :(得分:1)
a
是一个像python中的变量。
当您赋值变量a = {1, 5, 10}
时,它会为变量中的数组赋值。这是分配数组的简写语法。
要重新分配您只需使用new
运算符a = new[] {1, 5, 5}
再次分配给它的变量。
样品:
int[] a = {1, 5, 10}; // Shorthand syntax for creating array
a = new[] {1, 5, 5}; // Reassign using new operator
答案 3 :(得分:1)
[编辑:似乎OP不想制作现有阵列的副本,而只是创建一个全新的阵列。但我会留下这个以防万一。]
这是创建不仅仅是对原始数组的引用的数组副本的常规方法。
有一种更快的方法,即直接使用Array.Copy()
。您可以将其包装在扩展方法中以使其更易于使用:
/// <summary>Shallow clones an array.</summary>
/// <typeparam name="T">The type of array elements.</typeparam>
/// <param name="array">An array to clone.</param>
/// <returns>The cloned array.</returns>
/// <remarks>This is much faster than the built-in <see cref="Array.Clone"/> method.</remarks>
public static T[] ShallowClone<T>(this T[] array)
{
if (array == null)
{
throw new ArgumentNullException("array");
}
T[] result = new T[array.Length];
Array.Copy(array, result, array.Length);
return result;
}
通常你不会担心性能,但这确实比使用Array.Copy()
更快。
您可以像这样使用它:
int[] a = {1, 2, 3};
int[] b = a.ShallowClone();
这样,你不需要施放更快的和(尽管你当然也可以写一个使用Array.Clone()
的扩展方法。)