編程的類是什么意思,C#編程(三十三)----------Array類

 2023-10-05 阅读 22 评论 0

摘要:Array類 創建數組 Array intArray1 = Array.CreateInstance(typeof(int), 5); for (int i = 0; i < 5; i++) { 編程的類是什么意思????? intArray1.SetValue(33, i); } for (int i = 0; i < 5; i++) { ???? Console.WriteLine(intArray1.G

Array

創建數組

Array intArray1 = Array.CreateInstance(typeof(int), 5);

for (int i = 0; i < 5; i++)

{

編程的類是什么意思????? intArray1.SetValue(33, i);

}

for (int i = 0; i < 5; i++)

{

???? Console.WriteLine(intArray1.GetValue(i));

}

編程分幾類?Console.ReadKey();

?

分析:array類是一個抽象類,所以不能使用構造函數來創建數組(不能使用new).但除了可以使用C#語法創建數組實例之外,還可以使用靜態方法CreateInstance()創建數組.如果事先不知道元素的類型,該靜態方法就非常游泳.因為類型可以作為Type對象傳遞給CreateInstance()方法.

還可以將使用Array類創建的數組強制轉換成聲明為int[]的數組:

int[] intArray2 = (int[])intArray1;

CreateInstance()方法有許多重載版本,可以創建多維數組和不基于0的數組:

c語言求三個值中間值?using System;

?

namespace ConsoleApplication4

{

??? class Program

??? {

三菱plc編程入門教程。??????? static void Main(string[] args)

??????? {??

??????????? int[] lengths = { 2, 3 };

??????????? int[] lowerBounds = { 1, 10 };

??????????? Array racers = Array.CreateInstance(typeof(Person), lengths, lowerBounds);

?

array c++,??????????? racers.SetValue(new Person("a", "b"), 1, 10);

??????????? racers.SetValue(new Person("c", "d"), 1, 11);

??????????? racers.SetValue(new Person("e", "f"), 1, 12);

??????????? racers.SetValue(new Person("g", "h"), 2, 10);

??????????? racers.SetValue(new Person("i", "j"), 2, 11);

??????????? racers.SetValue(new Person("k", "l"), 2, 12);

java.lang.math類中的常用方法。?

??????????? Person[,] racers1 = (Person[,])racers;

??????????? Person first = racers1[1, 10];

??????? }

??? }

?

楊輝三角c語言編程,??? public class Person

??? {

??????? public Person()

??????? { }

?

??????? public Person(string firstName, string lastName)

編程都有哪些種類???????? {

??????????? this.FirstName = firstName;

??????????? LastName = lastName;

??????? }

?

??????? public string FirstName { get; set; }

Array類???????? public string LastName { get; set; }

??????? public override string ToString()

??????? {

??????????? return String.Format("{0} {1}", FirstName, LastName);

??????? }

??? }

三菱編程?}

?

?

使用SetValue()方法設置數組的元素,參數是:要設置的值,和當前索引號.

?

?

編程求三位數各位之和。復制數組

因為數組是引用類型,所以江數組變量賦予另一個數組變量,就會得到兩個引用同一數組的變量.而復制數組,會使數組實現ICloneable接口.這個接口定義的Clone()方法會創建數組的淺表副本.

如果數組的元素是值類型,:

?

?

如果數組包含引用類型,則不復制元素,而知復制引用.

array數組對象。除了使用Clone()方法之外,還可以使用Array.Copy()方法創建淺表副本.Clone()方法和Copy()方法有一個重要區別:Clone()方法會創建一個新數組,Copy()方法必須傳遞階數相同且有足夠元素的已有數組.

如果需要包含引用類型的數組的深層副本,就必須迭代數組并創建對象.

排序

string[] names = {"zhao","qian","sun","li" };

??????????? Array.Sort(names);

??????????? foreach (var item in names)

三個數求最大值的c語言編程。??????????? {

??????????????? Console.WriteLine(item);

??????????? }

??????????? Console.ReadKey();

排序后的結果:

li

qian

sun

zhao

?

由此看見,排序是按照字典序排列.

如果對數組使用自定義類,就必須事先IComparable接口.這個接口定義了一個方法CompareTo(),如果要比較的對象相等,該方法就返回0.如果該實例應拍在參數對象的前面,該方法就返回小于0的值.如果該實例應排在參數對象的后面,該方法就返回大于0的值.

案例:

public class Person:IComparable<Person>

??? {

??????? public Person()

??????? { }

?

??????? public Person(string firstName, string lastName)

??????? {

??????????? this.FirstName = firstName;

??????????? LastName = lastName;

??????? }

?

??????? public string FirstName { get; set; }

??????? public string LastName { get; set; }

??????? public override string ToString()

??????? {

??????????? return String.Format("{0} {1}", FirstName, LastName);

??????? }

?

??????? public int CompareTo(Person other)

??????? {

??????????? if (other==null)

??????????? {

??????????????? throw new ArgumentNullException("other");

??????????? }

??????????? int result = this.LastName.CompareTo(other.LastName);

??????????? if (result==0)

??????????? {

??????????????? result = this.FirstName.CompareTo(other.FirstName);

??????????? }

??????????? return result;

??????? }

??? }

編寫測試代碼:

static void Main(string[] args)

??????? {

??????????? Person[] persons ={

?????????????? new Person{FirstName="shan",LastName="yongxu"},

?????????????? new Person{FirstName="sun",LastName="yanzhao"},

?????????????? new Person{FirstName="zhu",LastName="haitao"},

?????????????? new Person{FirstName="wang",LastName="jiwei"}

????????????????????????????? };

??????????? Array.Sort(persons);

??????????? foreach (var item in persons)

??????????? {

??????????????? Console.WriteLine(item);

??????????? }

??????????? Console.ReadKey();

??????? }

這樣是按照名排序,不是按照姓排序.

?

如果Person對象的排序方式與上述不同,或者不能修改在數組中用作元素的類,就可以實現IComparer接口或IComparer<T>接口.這兩個接口定義了方法Compare().要比較的類必須實現這兩個接口之一.ICompare接口的Compare()方法定義了兩個要比較的參數的原因.其返回值與IComparable接口的CompareTo()方法類似.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

?

namespace ConsoleApplication1

{

??? public enum PersonCompareType

??? {

??????? FirstName,

??????? LastName

??? }

??? public class PersonComparer : IComparer<Person>

??? {

??????? private PersonCompareType compareType;

??????? public PersonComparer(PersonCompareType compareType)

??????? {

??????????? this.compareType = compareType;

??????? }

??????? public int Compare(Person x, Person y)

??????? {

??????????? if (x==null||y==null)

??????????? {

??????????????? throw new ArgumentNullException("x==y");

??????????? }

??????????? switch (compareType)

??????????? {

??????????????? case PersonCompareType.FirstName:

??????????????????? return x.FirstName.CompareTo(y.FirstName);???????????????????

??????????????? case PersonCompareType.LastName:

??????????????????? return x.LastName.CompareTo(y.LastName);

??????????????? default:

??????????????????? throw new ArgumentNullException("type");

??????????? }

??????? }

??? }

??? class Program

??? {

?

??????? static void Main(string[] args)

??????? {

??????????? Person[] persons ={

?????????????? new Person{FirstName="shan",LastName="yongxu"},

?????????????? new Person{FirstName="sun",LastName="yanzhao"},

?????????????? new Person{FirstName="zhu",LastName="haitao"},

?????????????? new Person{FirstName="wang",LastName="jiwei"}

????????????????????????????? };

??????????? Array.Sort(persons,new PersonComparer(PersonCompareType.FirstName));

??????????? foreach (var item in persons)

??????????? {

??????????????? Console.WriteLine(item);

??????????? }

??????????? Console.ReadKey();

??????? }

??? }

??? public class Person : IComparable<Person>

??? {

??????? public Person()

??????? { }

?

??????? public Person(string firstName, string lastName)

??????? {

??????????? this.FirstName = firstName;

??????????? LastName = lastName;

??????? }

?

??????? public string FirstName { get; set; }

??????? public string LastName { get; set; }

??????? public override string ToString()

??????? {

??????????? return String.Format("{0} {1}", FirstName, LastName);

??????? }

?

??????? public int CompareTo(Person other)

??????? {

??????????? if (other == null)

??????????? {

??????????????? throw new ArgumentNullException("other");

??????????? }

??????????? int result = this.LastName.CompareTo(other.LastName);

??????????? if (result == 0)

??????????? {

??????????????? result = this.FirstName.CompareTo(other.FirstName);

??????????? }

??????????? return result;

??????? }

??? }

}

分析:PersonComparer實現了IComparer<Person>接口,可以按照FirstNameLastName對象排序.枚舉PersonComparerType定義了可用于PersonComparer的排序選項:FirstNameLastName.排序方式由PersonComparer類的構造函數定義,在該構造函數中設置了一個PersonComparerType.實現Compare()方法時用一個switch語句指定是按照FirstName還是LastName排序.

?

這樣就可以按照你的需要來排序;是按照姓排序,還是按照名排序?

Array類還提供了Sort方法,需要將一個委托作為參數,這個參數可以傳遞給方法,從而比較兩個對象,而不需要依賴IComparableIComparer接口.

轉載于:https://www.cnblogs.com/FinleyJiang/p/7602566.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/2/118001.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息