C#梦游计划
生成随机数
Random rand = new Random();
Random.Next()
返回非负随机数;
Random.Next(Int)
返回一个小于所指定最大值的非负随机数
Random.Next(Int,Int)
返回一个指定范围内的随机数,例如返回负数
返回一个共有n位数,其中m位是小数的随机数
function randomXiao(n, m)
{
var a = Math.pow(10, n + m); //10的n+m次方
var b = random(a);
return b = b / Math.pow(10, m);
}
用var
类型预先不用知道变量的类型;根据给变量赋值来判定变量属于什么类型;如var a =1;
则是整型var a = “qwer”;
则是字符型
使用Var类型要注意:
- 必须在定义时初始化,即不能先定义后初始化,如:
var a;a = 1;
这样是不允许的 - 一旦初始化完成,不能再给变量赋与初始化不同的变量
var
类型的变量必须是局部变量
返回一个n到m之间的随机数
function randomNm(n, m)
{
if(m >= n)
{
return random(m - n + 1) + n;//加上1使得m也能在里面
}
else return false;
}
返回一个字母
function randomAscii()
{
var c = String.fromCharCode(random(26) + 65);
if(random(2)) return c.toLowerCase();
return c;
}
比较和排序(IComparable和IComparer以及它们的泛型实现)
- 比较:两个实体类之间按进行比较。
- 排序:在集合类中,对集合类中的实体进行排序。排序基于的算法基于实体类提供的比较函数。
当创建了自己的实体类,如,默认想要对其按照年龄进行排序,则需要为实体类实现接口
class Student:IComparable
{
public string Name { get; set; }
public int Age { get; set; }
#region IComparable Members
public int CompareTo(object obj)
{
Student student = obj as Student;
if (Age > student.Age) return 1;
else if (Age == student.Age) return 0;
else return -1;
//return Age.CompareTo(student.Age);
//函数完全可以使用该注释代码代替
}
#endregion
}
测试用例:
ArrayList studentList;
private void button1_Click(object sender, EventArgs e)
{
studentList.Sort();//
foreach (Student item in studentList)
{
this.textBox1.Text += item.Name + "----" +item.Age.ToString() + "\r\n" ;
}
}
使用来实现一个自定义的比较器
class SortName: IComparer
{
#region IComparer Members
public int Compare(object x, object y)
{
Student s1 = x as Student;
Student s2 = y as Student;
return s1.Name.CompareTo(s2.Name);
}
#endregion
}
在排序的使用为方法提供此比较器:
studentList.Sort(new SortName());
泛型实现
上个函数进行了装箱和拆箱,会影响性能。如果集合中有成千上万个复杂的实体对象,则在排序的时候所耗费掉的性能就是客观的。而泛型的出现,就可以避免掉拆箱和装箱。
上文代码中的,应该换成,对应的,我们就该实现和
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
studentList = new List<Student>();
studentList.Add(new Student()
{
Age = 1, Name = "a1"
};
studentList.Add(new Student()
{
Age = 5, Name = "g1"
};
studentList.Add(new Student()
{
Age = 4, Name = "b1"
};
studentList.Add(new Student()
{
Age = 2, Name = "f1"
};
}
List<Student> studentList;
private void button1_Click(object sender, EventArgs e)
{
studentList.Sort(new SortName());d
foreach (Student item in studentList)
{
this.textBox1.Text += item.Name + "----" +item.Age.ToString() + "\r\n" ;
}
}
}
class Student:IComparable<Student>
{
public string Name { get; set; }
public int Age { get; set; }
#region IComparable<Student> Members
public int CompareTo(Student other)
{
return Age.CompareTo(other.Age);
}
#endregion
}
class SortName: IComparer<Student>
{
#region IComparer<Student> Members
public int Compare(Student x, Student y)
{
return x.Name.CompareTo(y.Name);
}
#endregion
}