System.Object 到 System.Array 然后所有数组都是从他派生
首先是创建数组
int[] a = new int[100];
T[] a = new T[];
T[] b = new T[] { T a,T b };
二维数组
T[,] a = new T[10,10];
锯齿数组
T[][] a = new T[3][];
数组都是引用类型
所以他得机制也和普通的引用类型一样
关于数组转型
理论上这种情况不应该被允许。
需要转型个人感觉就意味着 设计不合理= = 重构一下吧。
数组复制
1 int[] intArray1 = { 1, 2 };
2 var o = (int[]) intArray1.Clone();
2.直接循环复制
1 int[] a = { 1,2,3,4 };
2 int[] b = new int[a.Length];
3 for (int i = 0; i != b.Length; i++)
4 {
5 b[i] = a[i];
6 }
名称 | 说明 | |
---|---|---|
Copy(Array, Array, Int32) | 从第一个元素开始复制 Array 中的一系列元素,将它们粘贴到另一 Array 中(从第一个元素开始)。 长度指定为 32 位整数。 | |
Copy(Array, Array, Int64) | 从第一个元素开始复制 Array 中的一系列元素,将它们粘贴到另一 Array 中(从第一个元素开始)。 长度指定为 64 位整数。 | |
Copy(Array, Int32, Array, Int32, Int32) | 从指定的源索引开始,复制 Array 中的一系列元素,将它们粘贴到另一 Array 中(从指定的目标索引开始)。 长度和索引指定为 32 位整数。 | |
Copy(Array, Int64, Array, Int64, Int64) | 从指定的源索引开始,复制 Array 中的一系列元素,将它们粘贴到另一 Array 中(从指定的目标索引开始)。 长度和索引指定为 64 位整数。 |
4.CopyTo
1 int[] a = { 1,2,3,4 };
2 int[] b = new int[a.Length];
3 a.CopyTo(b, a.Length);
5.这个是网上找的
string[] student1 = {
"$", "$", "c", "m", "d", "1",
"2", "3", "1", "2", "3" };
string[] student2 = { "0", "1",
"2", "3", "4", "5", "6", "6", "1",
"8", "16","10","45", "37", "82" };
ArrayList student = new ArrayList();
foreach (string s1 in student1)
{
student.Add(s1);
}
foreach (string s2 in student2)
{
student.Add(s2);
}
string[] copyAfter =
(string[])student.ToArray(typeof(string));
关于深浅拷贝 本人原以为我理解清楚了
深拷贝: 完全copy
浅拷贝: 只是复制引用,而在内存堆中的地址相同
这里却让我摸不着头脑
1 string[] intArray1 = { "a", "b" };
2 var o = (string[]) intArray1.Clone();
3 o[0] = "b";
这里 intArray 却不发生任何变化..
PS: 这里会补上,待本人去查查...
http://social.msdn.microsoft.com/Forums/zh-CN/csharplanguage/thread/63fc767f-d4ac-4e55-be2f-9a175eaedc93
关于手动创建数组
var o = Array.CreateInstance(typeof(a), 10);
for (var i = 0; i < o.Length; i++)
{
o.SetValue(new a(), i); //这里装箱拆箱了吧= =
}
for (int i = 0; i < 5; i++)
{
Console.WriteLine(o.GetValue(i));
}
ok
o 是object[]
如果只是创建 数组 确实没有必要用这玩意儿
这玩意儿得好处是可以创建索引非0的数组
int[] lengths = {2, 3};
int[] lowerBounds = {1, 10};
Array racers = Array.CreateInstance(typeof(int), lengths, lowerBounds);
不禁想问 非0数组这玩意儿有嘛用. PS. 本人从未使用过
某人猜测。 估计只有对代码要跨语言的时候才会用到 比如某些语言的是非0数组.. 如果只是在C# 中使用 那么再说
关于Array的其他静态方法
1 int[] a = { 1,2,3,4 };
2 Array.Find<Int32>(a, p => {
3 if (p == 1) return true;
4 else return false;
5 });
本人使用最多的就是这种形式= =
其他类似
Array.Sort
Array.Select
都可以以此类推..
主要 重载版本太多如果全部。。 太那个啥。 算是一个书签 用到的时候在来翻吧