目录
Propertys
Array.ICollection.Count:
获取 Array 中包含的元素的个数。
int System.Collections.ICollection.Count { get; }
Array.Length
获取 Array 的中所有的元素个数
public int Length { get; }
Array.Rank
获取 Array 的秩(维数)。 例如,一维数组返回 1,二维数组返回 2,依次类推。
public int Rank { get; }
static void Main(string[] args) { int[] array1 = new int[10]; int[,] array2 = new int[10, 3]; int[,,] array3 = new int[10, 3,3]; Console.WriteLine("{0}: {1} 维数组", array1.ToString(), array1.Rank); Console.WriteLine("{0}: {1} 维数组", array2.ToString(), array2.Rank); Console.WriteLine("{0}: {1} 维数组", array3.ToString(), array3.Rank); } 输出: System.Int32[]: 1 维数组 System.Int32[,]: 2 维数组 System.Int32[,,]: 3 维数组
Methods
Array.BinarySearch (静态方法)
该方法有很多重载形式
public static int BinarySearch (Array array, object value);
- 在 array 数组中搜索 一个 名为 value 的值。
- 在 array 中允许重复元素。 如果Array包含多个等于 value 的元素,则该方法仅返回其中一个匹配项的索引,而不一定返回第一个匹配项的索引。
- null 总是可以与任何其他引用类型进行比较; 因此,与null的比较不会产生异常。
- 此方法为 O (log
n
) 操作,其中n
是Length的array
。如果 参数 array
为null
。 抛出 ArgumentNullException如果参数 array
是多维的。抛出 RankException如果参数 value
的类型与array
的元素不兼容。抛出 ArgumentExceptionvalue
不实现 IComparable 接口,并且搜索遇到不实现 IComparable 接口的元素。抛出 InvalidOperationException如果找到
value
,那么返回 该value 在数组中
的索引;否则为负整数。(具体看代码)
- 如果找不到的
value
是小于该数组中的所有元素,那么返回的索引值是该数组中已排序的元素下标为 0 的位置。- 如果找不到的 value 是大于该数组中的所有元素, 那么返回索引值是 该数组中已排序的元素的最后一个元素下标值 + 1;
- 如果找不到的 value 刚好即不大于所有元素也不小于所有元素,那么返回的是数组中第一个 比 value 大的元素的索引值。
- 如果使用非排序数组调用此方法,则返回值可能不正确,并且可能返回负数,就算该数组中存在 value 也会返回负数。
static void Main(string[] args) { Array myIntArray = Array.CreateInstance(typeof(Int32), 5); myIntArray.SetValue(8, 0); myIntArray.SetValue(2, 1); myIntArray.SetValue(6, 2); myIntArray.SetValue(3, 3); myIntArray.SetValue(7, 4); Array.Sort(myIntArray); //想使用 BinarySearch 方法查找元素,最好使用 Sort 方法对元素进行排序,否则会出现意外结果 foreach (var tt in myIntArray) { WriteLine(tt); } object locationValue = 1; int myIndex1 = Array.BinarySearch(myIntArray, locationValue); if (myIndex1 < 0) { WriteLine($"找不到该对象{locationValue},下一个索引位置是{~myIndex1}"); } else { WriteLine($"找到该对象,为数字{myIntArray}, 在数组的索引位置{myIndex1}"); } WriteLine(); object myObjectEven = 25; int myIndex = Array.BinarySearch(myIntArray, myObjectEven); if (myIndex < 0) { WriteLine($"找不到该对象{myObjectEven},下一个索引位置是{~myIndex}"); } else { WriteLine($"找到该对象,为数字{myIntArray}, 在数组的索引位置{myIndex}"); } WriteLine(); object sValue = 4; int myIndex4 = Array.BinarySearch(myIntArray, sValue); if (myIndex4 < 0) { WriteLine($"找不到该对象{sValue},下一个索引位置是{~myIndex4}"); } else { WriteLine($"找到该对象,为数字{sValue}, 在数组的索引位置{myIndex4}"); } WriteLine(); object searchValue = 6; int myIndex3 = Array.BinarySearch(myIntArray, searchValue); if (myIndex3 < 0) { WriteLine($"找不到该对象{searchValue},下一个索引位置是{~myIndex3}"); } else { WriteLine($"找到该对象,为数字{searchValue}, 在数组的索引位置{myIndex3}"); } WriteLine();
Array.Clear:
public static void Clear (Array array, int index, int length);
- 从 名为 array 数组中的 index 处的位置开始清空 length 个 元素类型。被清空的元素被设置为该元素类型的默认值
如果参数 array
为null
。抛出 ArgumentNullException 异常。如果 参数 index
小于 0。抛出 IndexOutOfRangeException 异常。如果 参数
length
小于0。抛出 IndexOutOfRangeException 异常- 如果
index
+length
大于array
的大小。抛出 IndexOutOfRangeException 异常- 此方法为 O (
n
) 操作,其中n
是length
。- 此方法将数组中的每个元素重置为元素类型的默认值。 它将引用类型(包括String 对象)的元素设置为null,并将值类型的元素设置为下表中显示的默认值。
- 注意: 此方法仅清除元素的值; 它不会删除元素本身。 数组具有固定大小; 因此,不能添加或删除元素。
类型 值 Boolean false
所有整型和浮点数值类型 0 (零) DateTime DateTime.MinValue 其他值类型 该类型字段的默认值 static void Main(string[] args) { int[] numbers1 = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; // 从 numbers1 数组中索引2的位置开始清空元素,一共向后清空5个元素,被清空的元素都在相应的位置都初始化为0 Array.Clear(numbers1, 2, 5); foreach (var tt in numbers1) { Write(tt); } WriteLine(); int[,] numbers2 = { { 11, 22, 33 }, { 44, 55, 66 }, { 77, 88, 99 } }; Array.Clear(numbers2, 2, 5); foreach (var tt in numbers2) { Write(tt); } WriteLine(); int[,,] numbers3 = { { {1, 2}, {3, 4}}, { {5, 6}, {7, 8}}, { {9, 10}, {11, 12}}}; Array.Clear(numbers3, 2, 5); foreach (var tt in numbers3) { Write(tt); } }
Array.Clone
public object Clone ();
Clone 方法为数组进行浅复制,也就是说,它只创建了数组本身的克隆。 对于类型数组和引用类型数组而言,有不同的结果。
此方法为 O (
n
) 操作,其中n
是Length。
- 克隆值类型数组会得到两个独立的数组。
- 克隆引用类型数组会导致两个数组指向相同的对象。
Clone方法返回 object类型的引用,该引用必须强制转换为数组类型。
下列代码克隆一个值类型数组的示例,它产生了两个独立的数组:
namespace HelloWorld_Console { class Program { static void Main(s