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>接口,可以按照FirstName或LastName對象排序.枚舉PersonComparerType定義了可用于PersonComparer的排序選項:FirstName和LastName.排序方式由PersonComparer類的構造函數定義,在該構造函數中設置了一個PersonComparerType值.實現Compare()方法時用一個switch語句指定是按照FirstName還是LastName排序.
?
這樣就可以按照你的需要來排序;是按照姓排序,還是按照名排序?
Array類還提供了Sort方法,需要將一個委托作為參數,這個參數可以傳遞給方法,從而比較兩個對象,而不需要依賴IComparable或IComparer接口.