集合类List与Dictonary实例练习

a、List<>泛型集合


代码如下:

View Code
using System;
using System.Collections.Generic;
namespace _02_泛型集合 {
class Person {
public Person(string name, int age) {
this .name = name;
this .age = age;
}
private string name;
public string Name {
get {
return name;
}
set {
name = value ;
}
}
private int age;
public int Age {
get {
return age;
}
set {
age = value ;
}
}
}
class Student : Person {
public Student(string name, int age)
: base (name, age) {
}
}
class Teacher : Person {
public Teacher(string name, int age)
: base (name, age) {
}
}
class Program {
static void Main( string[] args) {
Student xyy = new Student( "小月月" , 12);
Student fj = new Student( "凤姐" , 14);
Student fr = new Student( "芙蓉姐姐" , 16);
Student xl = new Student( "犀利哥" , 18);
List <Student > student = new List <Student >();
student.Add(xyy);
student.Add(fj);
student.Add(fr);
student.Add(xl);
Teacher tea = new Teacher( "wanghao" , 21);
//student.Add(tea);//因为List<Student> 限制类型必须为Student 所以不能添加Teacher对象
//比ArrayList更加限制存储的类型 而且效率要高 因为添加 取出对象是不会发生装箱 拆箱的操作的
//遍历
foreach (Student item in student) {
Console .WriteLine(item.Name);//因为返回的就是student对象 所以可以直接读取属性值
Console .WriteLine(item.Age);
}
//移除
student.Remove(xyy); //移除的是引用地址 所以下面移除的s不是xyy
Student s = new Student( "小月月" , 12);
student.Remove(s);
student.RemoveAt(0);
student.RemoveRange(0, 2); //从0索引移除后面两位 即前移除前两位学生 xyy fj
//student.RemoveAll();//移除所有满足条件的 详见帮助文档
student.Clear();
Console .WriteLine(student.Contains(xyy));
//ToArray()方法 转换学生类型数组
Student [] stu = student.ToArray();
foreach (Student item in stu) {
Console .WriteLine(item.Name);
}
Console .Read();
}
}
}

b、Dictonary<>字典


代码如下:

View Code
using System;
using System.Collections.Generic;
namespace _03_泛型集合 {
class Student {
public Student(string name, int age) {
this .name = name;
this .age = age;
}
private string name;
public string Name {
get {
return name;
}
set {
name = value ;
}
}
private int age;
public int Age {
get {
return age;
}
set {
age = value ;
}
}
}
class Program {
static void Main( string[] args) {
Student xyy = new Student( "小月月" , 12);
Student fj = new Student( "凤姐" , 14);
Student fr = new Student( "芙蓉姐姐" , 16);
Student xl = new Student( "犀利哥" , 18);
Dictionary <string , Student> student = new Dictionary < string, Student >();//key为string类型的name value为Student对象
student.Add( "小月月" , xyy);
student.Add( "凤姐" , fj);
student.Add( "芙蓉姐姐" , fr);
student.Add( "犀利哥" , xl);
Console .WriteLine(student["犀利哥" ].Name); //根据key获取value
//遍历 通过key
foreach (string item in student.Keys) {
Console .WriteLine(item);
Console .WriteLine(student[item].Age);
}
//遍历 通过value
foreach (Student item in student.Values) {
Console .WriteLine(item.Age);
}
//遍历键值对
foreach (KeyValuePair < string, Student > item in student) {
Console .WriteLine(item.Key);
Console .WriteLine(item.Value.Age);//item.Value是Student对象 直接使用
}
//移除
//student.Remove("小月月");
//student.Clear();
student.ContainsKey( "小月月" ); //是否包含该key
//更多参见帮助文档
Console .Read();
}
}
}

c、泛型集合练习


代码如下:

View Code
using System;
using System.Collections.Generic;
namespace _04__泛型练习 {
class Program {
static void Main( string[] args) {
//把分拣奇偶数的程序用泛型实现
string str = "7 4 3 2 9 8 33 22" ;
string [] strs = str.Split(' ' );
strs = Getevent(strs).ToArray();
string res = string .Join( " ", strs); //string数组 直接用join就好了
Console .WriteLine(res);
//将int数组中的奇数放到一个新的int数组中返回
int [] intarr = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
List <int > list = new List <int >();
foreach (int item in intarr) {
if (item % 2 != 0) {
list.Add(item);
}
}
intarr = list.ToArray();
foreach (int item in intarr) {
Console .WriteLine(item);
}
//从一个整数的List<int>中取出最大数。不使用自身带的Max()方法。
List <int > list2 = new List <int > { 1, 2, 3, 4, 5, 6, 7, 8 };
int max = list2[0];
foreach (int item in list2) {
if (item > max) {
max = item;
}
}
Console .WriteLine("泛型集合最大值为{0}" , max);
Console .ReadKey();
}
public static List< string > Getevent(string [] str) {
List <string > list = new List <string >();
List <string > list2 = new List <string >();
foreach (string item in str) {
if (int .Parse(item) % 2 != 0) {
list.Add(item);
} else {
list2.Add(item);
}
}
list.AddRange(list2);
return list;
}
}
}

d、泛型集合练习2


代码如下:

View Code
using System;
using System.Collections.Generic;
namespace _06_泛型集合练习 {
class Program {
static void Main( string[] args) {
//把1,2,3转换为壹贰叁
string str = "1壹 2贰 3叁 4肆 5伍 6陆 7柒 8捌 9玖 0零" ;
Dictionary <char , char> money = new Dictionary < char, char >();
string [] strs = str.Split(' ' );
string s = "123456789" ;
string news = "" ;
for (int i = 0; i < strs.Length; i++) {
money.Add(strs[i][0], strs[i][1]);
}
foreach (char item in s) {
news += money[item];
}
Console .WriteLine(news);
char n = '1' ;
Console .WriteLine(n + ' ' ); //结果显示为81 char字符相加是把其Asic码相加的
Console .WriteLine(n + 2);//结果显示为51
//如果想实现字符串相加就把任一个参数改变为tostring输出
Console .WriteLine(n.ToString() + 2);//显示为12
//计算字符串中每种字符出现的次数(面试题)。“Welcome to Chinaworld”,不区分大小写,打印“W 2” “e 2” “o 3”……
string str2 = "Welcome to Chinaworld" ;
Dictionary <char , int> num = new Dictionary < char, int >();
foreach (char item in str2.ToLower().Replace( " " , "" )) {
if (num.ContainsKey(item)) {
num[item]++;
} else {
num.Add(item, 1);
}
}
foreach (var key in num.Keys) {
Console .WriteLine("\"{0}{1}\"" , key, num[key]);
}
//编写一个函数进行日期转换,将输入的中文日期转换为阿拉伯数字日期,比如:二零一二年十二月月二十一日要转换为2012-12-21。
string date = "二零一二年十二月二十一日" ; //date2的转换 需要考虑十左右字符是否都在字典中 在则为 则十消失 如果左边不在右边在则变1 如果左边在右边不在则变0 如果左右都不在则变10 还是蛮复杂的
//string date = "二零一二年二月二一日";
string strNumb = "一1 二2 三3 四4 五5 六6 七7 八8 九9 零0" ;
string [] strNumbs = strNumb.Split(' ' );
string nullYear = "" ;
Dictionary <char , char> years = new Dictionary < char, char >();
for (int i = 0; i < strNumbs.Length; i++) {
years.Add(strNumbs[i][0], strNumbs[i][1]);
}
//years.Add('年', '-');
//years.Add('月', '-');
for (int i = 0; i < date.Length; i++) {
if (years.ContainsKey(date[i])) {
nullYear += years[date[i]];
} else if (date[i] == '年' || date[i] == '月' ) {
nullYear += '-' ;
} else if (date[i] == '十' && years.ContainsKey(date[i + 1]) && !years.ContainsKey(date[i - 1])) {
nullYear += '1' ;
} else if (date[i] == '十' && !years.ContainsKey(date[i + 1]) && years.ContainsKey(date[i - 1])) {
nullYear += '0' ;
} else if (date[i] == '十' && !years.ContainsKey(date[i + 1]) && !years.ContainsKey(date[i - 1])) {
nullYear += "10" ;
}
}
Console .WriteLine(nullYear);
Console .ReadKey();
}
}
}

e、泛型集合练习2中日期转换提取为方法


代码如下:

View Code
using System;
using System.Collections.Generic;
namespace _07_日期Change {
class Program {
static string str = "一1 二2 三3 四4 五5 六6 七7 八8 九9 零0" ;
static string [] strs = str.Split( ' ');
static Dictionary < char, char > money = new Dictionary< char , char >();
static void Main( string[] args) {
for (int i = 0; i < strs.Length; i++) {
money.Add(strs[i][0], strs[i][1]);
}
//string date = "二零一二年二月二一日";
string date = "二零一二年二十月二十一日" ;
date = newstr(date);
string nullYear = "" ;
//money.Add('年', '-');
//money.Add('月', '-');
for (int i = 0; i < date.Length; i++) {
if (money.ContainsKey(date[i])) {
nullYear += money[date[i]];
} else if (date[i] == '年' || date[i] == '月' ) {
nullYear += '-' ;
}
}
Console .WriteLine(nullYear);
Console .WriteLine(date);//二零一二年一二月二一日
Console .ReadKey();
}
//十左右字符都在字典中 那么十消失 如果左边不在右边在则变1 如果左边在右边不在则变0 如果左右都不在则变10
public static string newstr( string str) {
string newstr = "" ;
for (int i = 0; i < str.Length; i++) {
if (str[i] == '十' ) {
bool left = money.ContainsKey(str[i - 1]);
bool right = money.ContainsKey(str[i + 1]);
if (left && right) {
newstr += "" ;
} else if (right) { //!left &&
newstr += "一" ;
} else if (left) { //&& !right
newstr += "零" ;
} else {//if (!left && !right)
newstr += "一零" ;
}
} else {
newstr += str[i];
}
}
return newstr;
}
}
}

f、泛型集合练习之翻译软件


代码如下:

View Code
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace _05_翻译软件 {
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}
Dictionary <string , string> dic = new Dictionary < string, string >();
private void btnChange_Click( object sender, EventArgs e) {
if (dic.ContainsKey(txtEnglish.Text)) {
txtChina.Text = dic[txtEnglish.Text];
} else {
MessageBox .Show("请购买新的字典" );
}
}
private void Form1_Load( object sender, EventArgs e) {
string [] filecon = File .ReadAllLines( "英汉词典TXT格式.txt" , Encoding .Default);//格式遵循abandon v.抛弃,放弃
for (int i = 0; i < filecon.Count(); i++) {
string [] arr = filecon[i].Split(new char[] { ' ' }, StringSplitOptions .RemoveEmptyEntries);
if (!dic.ContainsKey(arr[0])) {
dic.Add(arr[0], arr[1]);
}
}
}
}
}

(0)

相关推荐

  • Swift教程之集合类型详解

    Swift 提供两种集合类型来存储集合,数组和字典.数组是一个同类型的序列化列表集合.字典是一个能够使用类似于键的唯一标识符来获取值的非序列化集合. 在Swift中,数组和字典的键和值都必须明确它的类型.这意味这数组和字典不会插入一个错误的类型的值,以致于出错.这也意味着当你在数组和字典中取回数值的时候能够确定它的类型. Swift 使用确定的集合类型可以保证代码工作是不会出错,和让你在开发阶段就能更早的捕获错误. note: Swift的数组 储存不同的类型会展示出不同的行为,例如变量,常量或

  • js正则函数match、exec、test、search、replace、split使用介绍集合

    match 方法 使用正则表达式模式对字符串执行查找,并将包含查找的结果作为数组返回. stringObj.match(rgExp) 参数 stringObj 必选项.对其进行查找的 String 对象或字符串文字. rgExp 必选项.为包含正则表达式模式和可用标志的正则表达式对象.也可以是包含正则表达式模式和可用标志的变量名或字符串文字. 其余说明与exec一样,不同的是如果match的表达式匹配了全局标记g将出现所有匹配项,而不用循环,但所有匹配中不会包含子匹配项. 例子1: functi

  • C#中DataSet转化为实体集合类的方法

    本文实例讲述了C#中DataSet转化为实体集合类的方法,分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: /// <summary> /// DataSet转换为实体类 /// </summary> /// <typeparam name="T">实体类</typeparam> /// <param name="p_DataSet">DataSet</param> /// <

  • Python中集合类型(set)学习小结

    set 是一个无序的元素集合,支持并.交.差及对称差等数学运算, 但由于 set 不记录元素位置,因此不支持索引.分片等类序列的操作. 初始化 复制代码 代码如下: s0 = set() d0 = {} s1 = {0} s2 = {i % 2 for i in range(10)} s = set('hi') t = set(['h', 'e', 'l', 'l', 'o']) print(s0, s1, s2, s, t, type(d0)) 运行结果: 复制代码 代码如下: set() {

  • SQL集合函数中case when then 使用技巧

    那么在集合函数中它有什么用呢 ? 假设数据库有一张表名为student的表. 如果现在要你根据这张表,查出江西省男女个数,广东省男生个数,浙江省男女个数 怎么写SQL语句?即要生成下结果表 答案是:select sex ,count ( case province when '广东省' then '广东省' end )as 广东省 ,count ( case province when '江西省' then '江西省' end )as 江西省 ,count ( case province whe

  • Java中的collection集合类型总结

    Java集合是java提供的工具包,包含了常用的数据结构:集合.链表.队列.栈.数组.映射等.Java集合工具包位置是java.util.* Java集合主要可以划分为4个部分:List列表.Set集合.Map映射.工具类(Iterator迭代器.Enumeration枚举类.Arrays和Collections). Java集合工具包框架如下图. 说明:看上面的框架图,先抓住它的主干,即Collection和Map. Collection是一个接口,是高度抽象出来的集合,它包含了集合的基本操作

  • C++简单集合类的实现方法

    来自于C++程序设计的一个题目.实现一个集合类,要求实现以下4个操作.  1.向集合中添加元素,如果集合中已存在元素则不添加  2.从集合中移除元素,移除之前需要先判断集合中元素是否存在  3.重载+运算符,用以实现集合的求并集运算  4.重载*运算符,用以实现集合的求交集运算 1.类的整体设计 该问题需要模拟实现集合类,我们可以使用数组来模拟集合,于是使用int items[100]用来存放集合中的数据.为了实现数组的遍历,这就需要一个整数用来表示数组中元素的个数,于是使用int number

  • 集合类Array List HashTable实例操作练习

    集合常用操作添加.遍历.移除 命名空间System.Collections ArrayList 可变长度数组,使用类似于数组 属性 Capacity Count 方法 Add() AddRange() Remove() RemoveAt() Clear() Contains() ToArray() Hashtable 键值对(KeyValuePair)的集合,类似于字典 a.ArrayList对值类型的操作 复制代码 代码如下: using System; using System.Collec

  • Python set集合类型操作总结

    Python中除了字典,列表,元组还有一个非常好用的数据结构,那就是set了,灵活的运用set可以减去不少的操作(虽然set可以用列表代替) 小例子 1.如果我要在许多列表中找出相同的项,那么用集合是最好不过的了,用集合只用一行就可以解决 复制代码 代码如下: x & y & z # 交集 2.去重 复制代码 代码如下: >>> lst = [1,2,3,4,1] >>> print list(set(lst)) [1, 2, 3, 4] 用法 注意se

  • 使用Enumeration和Iterator遍历集合类详解

    前言在数据库连接池分析的代码实例中,看到其中使用Enumeration来遍历Vector集合.后来就找了一些资料查看都有哪些方法可以遍历集合类,在网上找到了如下的使用Enumeration和Iterator遍历集合类的实例.不过这个实例中提到了Enumeration比Iterator的效率更高,其实并不是这样子的,该实例是的时间测试太片面了, 因为数据量太少.随着数据两的增加,两者之间的效率越来越接近,而不会出现倍数的比例.而且现在普遍都使用Iterator来遍历集合类,只有特别明确声明必须使用

随机推荐