开发者社区> 橘子红了呐> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

C# 中的数组(array)

简介:
+关注继续查看

原文 C# 中的数组(array)

 

特性

数组是一个无序的元素序列。数组元素存储在一个连续性的内存块中,并可使用一个整数索引来访问。

C# 声明数组变量时,数组的大小不是声明的一部分。这点与C/C++有些区别。

1
int[] dogs; // 声明数组 // 声明时不需要指定数组的大小 

 只有在实际创建数组实例的时候,才需要指定数组的大小。创建数组实例时编译器默认将数组元素初始化为0,null,false(依元素类型不同)。

1
pins = new int[4];  // 只有在实际创建数组实例的时候,才需要指定数组的大小。 

 以上两个语句运行后结果如下:

 数组实例的大小不一定是常量,它可以在运行时计算

    int size = int.Parse(Console.ReadLine());  
    int[] pins = new int[size];  

 

某些情况下,数组大小可能为 0,这个设计是有意义的。大小为 0 的数组不是一个 null(空)数组。除了基本数据类型,数组元素还可以是结构、枚举或者类。

大括号中的值不一定是常量,它们可以是在运行时计算的值。

1
2
3
4
5
Random r = new Random(); 
int[] pins = new int[4]{r.Next()%10, 
                        r.Next()%10, 
                        r.Next()%10, 
                        r.Next()%10}; 

 

初始化

初始化数组变量。大括号中的值的数量必须和要创建的数组实例的大小完全匹配!

 

1
2
3
int[] pins = new int[3] { 1, 2, 3, 4 };     // 编译时错误 
int[] pins = new int[4] { 1, 2, 3 };        // 编译时错误 
int[] pins = new int[4] { 1, 2, 3, 4 };     // 正确 

 

 初始化一个数组变量时,实际上可省略 new 表达式和数组的大小,编译器将根据初始值的数量来计算大小。

1
int[] pins = { 1, 2, 3, 4 };    // 正确 

创建一个由结构构成的数组时,为了初始化数组的每个结构,可以调用结构构造器。

 

1
2
3
4
5
6
7
8
9
10
11
12
13
struct Time 
    private int hours, minutes, seconds; 
   
    public Time(int hh, int mm) 
    
        hours = hh; 
        minutes = mm; 
        seconds = 0; 
    
   
Time[] schedule = {new Time(12, 30), new Time(5, 30)};  // 调用自定义的结构构造器 

 

隐式类型的数组创建

匿名类(anonymous class)是一个没有名字的类,只能包含 public 字段,字段必须全部初始化不可以是 static 字段,而且不能在其中指定方法

可以创建隐式类型的数组。如果在声明数组的时候指定了一个初始值列表,就可以让 C# 编译器自己推断数组中的元素的类型。

 

1
2
3
4
5
6
7
8
9
10
11
var names = new[]{"Steven""Lily""Tom""Miley"}; // C# 推断 names 是一个 string 类型 
Console.WriteLine(names[0]); 
Console.WriteLine(names[3]); 
   
// 隐式类型转换的数组尤其适用于匿名类型 
var people = new[]{new {Name = "Steven", Age = 27},      
                    new {Name = "Lily", Age = 25}, 
                    new {Name = "Tom", Age = 8}, 
                    new {Name = "Miley", Age = 6}}; 
// 数组中的每个元素都是匿名类型 
// 并且每个元素都必须指定相同的匿名类型 

 

 访问及遍历数组有如下方法,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
   
namespace arrayType 
    class Program 
    
        static void Main(string[] args) 
        
            string[] names = new[]{"Steven""Lily""Tom""Miley"}; 
            Console.WriteLine(names[0]); 
            Console.WriteLine(names[3]); 
   
            Console.WriteLine(); 
            Console.WriteLine("用 for 遍历字符串数组"); 
            for (int i = 0; i < names.Length; i++)   
                    // length 是属性而不是方法,不要加 '()' 
            
                Console.WriteLine(names[i]); 
            
   
            Console.WriteLine(); 
            Console.WriteLine("用 foreach 遍历 string 数组");  
                    // foreach 是遍历数组的首选方式 
            foreach(string name in names) 
            
                Console.WriteLine(name); 
            
   
            var people = new[]{new {Name = "Steven", Age = 27}, 
                               new {Name = "Lily", Age = 25}, 
                               new {Name = "Tom", Age = 8}, 
                               new {Name = "Miley", Age = 6}}; 
   
            Console.WriteLine(); 
            Console.WriteLine("用 foreach 遍历 var 数组"); 
            foreach(var person in people) 
            
                Console.WriteLine(person);  
            
   
            Console.WriteLine(); 
            Console.WriteLine("用 foreach 遍历 var 数组"); 
            foreach (var person in people) 
            
               Console.WriteLine("Name: {0}, Age: {1}", person.Name, person.Age); 
            
   
            Console.WriteLine(); 
        
    

 

 

复制数组

复制数组有如下方法,但只有最后一种是真正的复制。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int[] pins = { 1, 2, 3, 4 }; 
int[] copy = new int[pins.Length]; 
pins.CopyTo(copy, 0);   // 将数组 pins 的内容复制到数组 copy 
// CopyTo 是浅拷贝,从指定位置开始复制,复制后两个数组都引用同一组对象 
   
int[] pins = { 1, 2, 3, 4 }; 
int[] copy = new int[pins.Length]; 
Array.Copy(pins, copy, copy.Length);    // Copy 方法是浅拷贝 
   
int[] pins = { 1, 2, 3, 4 }; 
int[] copy = (int[])pins.Clone();       // Clone 方法是浅拷贝 
    // Clone 放回的是一个 object,所以必须进行类型准换 
   
int[] pins = { 1, 2, 3, 4 }; 
int[] copy = new int[pins.Length]; 
for (int i = 0; i < copy.Length; i++) 
    copy[i] = pins[i];      // 深拷贝,也就是产生了两个数组 

 

维数

数组的维数是没有限制的,可以创建多维数组。

1
2
3
string[,] stars = new string[6,8];  // 创建二维数组,6 行 8 列 
stars[2, 6] = "Mars";   // 将单元格(2, 6)的元素设为 Mars 
    // 使用多维数组时,要准备好捕捉并处理 OutOfMemoryException 

 

没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。





    本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/5948079.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
js数组Array的元素增删操作
js数组Array的元素增删操作
22 0
你真的用对 Array.map() 了吗
你真的用对 Array.map() 了吗
33 0
JS Array(数组)简单入门
数组是什么? 数组通常被描述为“像列表一样的对象”; 简单来说,数组是一个包含了多个值的对象。数组对象可以存储在变量中,并且能用和其他任何类型的值完全相同的方式处理,区别在于我们可以单独访问列表中的每个值,并使用列表执行一些有用和高效的操作,如循环 - 它对数组中的每个元素都执行相同的操作。 创建数组
34 0
论c++中的数组,vector和array的区别及用法
论c++中的数组,vector和array的区别及用法
84 0
js数组Array的元素增删操作
js数组Array的元素增删操作
77 0
js清空array数组的方法
方式1,splice   Js代码   var ary = [1,2,3,4];   ary.splice(0,ary.length);   console.log(ary); // 输出 [],空数组,即被清空了    方式2,length赋值为0 这种方式很有意思,其它语言如Java,其数组的length是只读的,不能被赋值。
926 0
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载