题目:输入一串字符串字母,比如:Welcome to China,比较每个字母出现的次数,不区分大小写。

解决这道题的方法很多。可能一百个人有一百个思路。当时第一眼看到这个题我的思路是:先将接受的一串字符转成小写,写一个for循环,将字符串每一个元素与26英文字母都比一次。但是发现这样很难实现,因为出现的字母和出现的次数怎么对应起来。

什么对应什么,有没发现这就是集合的思想,一个键值对就能搞定。

using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
/// <summary>
/// 用户输入一串英文字母,算出每个字母出现的次数,不区分大小写
/// </summary>
namespace CollectionLession
{
class Program
{
static void Main(string[] args)
{
var dic = new Dictionary<char, int>();
Console.WriteLine("请输入一句英文");
string str = Console.ReadLine().ToLower(); //接受输入并且转成小写
char[] chs = str.ToCharArray();
for (int i = ; i < chs.Length; i++)
{
if (dic.Count > )
{
if (dic.ContainsKey(chs[i]))
{
dic[chs[i]] += ;
}
else
dic.Add(chs[i], );
}//end if
else
{
dic.Add(chs[i], );
}//end else
}//end for
//遍历输出一遍集合,但是不输出空格
foreach (var item in dic)
{
if (item.Key.Equals(' '))
continue;
else
Console.WriteLine("{0} 出现{1}", item.Key, item.Value);
}//end foreach
Console.ReadKey(); }
}
}

这样就搞定了

可能大家在问为什么不用另一个键值对集合Hashtable。

Hashtable是非泛型集合,不妨声明一个Hashtable然后按F12找到Hashtable这个类看看

//
// 摘要:
// 将带有指定键和值的元素添加到 System.Collections.Hashtable 中。
//
// 参数:
// key:
// 要添加的元素的键。
//
// value:
// 要添加的元素的值。该值可以为 null。
//
// 异常:
// T:System.ArgumentNullException:
// key 为 null。
//
// T:System.ArgumentException:
// System.Collections.Hashtable 中已存在具有相同键的元素。
//
// T:System.NotSupportedException:
// System.Collections.Hashtable 为只读。- 或 - System.Collections.Hashtable 具有固定大小。
[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
public virtual void Add(object key, object value);

Hashtable的key和value是object类型的,而object类型是不能使用运算符的。比如下图

虽然可以使用强制类型转换实现功能,但是还是没有泛型集合Dictionary好用啦

宝宝是那种能不多写一行代码就不愿多写一行代码的猿类

这个代码写了两遍,既然犯了同一个错误

这样写是会把空格都输出的,有时候脑子不好使还真发现不了问题。

因为key是char类型的,所有要用' '符号,“”是字符串类型的时候用的。

如果写成这样就回很容易看出问题,

总之作为一名程序员,要有敏锐的器官。。。一定要对类型较真才行

tip:不懂的代码多按按f12查看是怎么声明的,注释很全,大概就清楚怎么用了

C#Dictionary集合的使用的更多相关文章

  1. Dictionary集合运用

    Dictionary基础定义: 从一组键(key)到一组值(value)的映射,每一个添加项都是由一个值及其相关联的键组成: 任何键都必须是唯一的: 键不能为空引用的null(VB中的Nothing) ...

  2. Collection was modified; enumeration operation may not execute Dictionary 集合已修改;可能无法执行枚举操作

    public void ForeachDic() { Dictionary dic = new Dictionary(); dic.Add("1", 10); dic.Add(&q ...

  3. Dictionary集合 字典

    1 Dictionary<int, string> dic = new Dictionary<int, string>(); dic.Add(,"张三"); ...

  4. C#泛型集合之Dictionary<k, v>使用技巧

    1.要使用Dictionary集合,需要导入C#泛型命名空间 System.Collections.Generic(程序集:mscorlib) 2.描述 1).从一组键(Key)到一组值(Value) ...

  5. ASP.NET MVC中默认Model Binder绑定Action参数为List、Dictionary等集合的实例

    在实际的ASP.NET mvc项目开发中,有时会遇到一个参数是一个List.Dictionary等集合类型的情况,默认的情况ASP.NET MVC框架是怎么为我们绑定ASP.NET MVC的Actio ...

  6. C#泛型集合—Dictionary<K,V>使用技巧

    转载:http://blog.csdn.net/a125138/article/details/7742022 1.要使用Dictionary集合,需要导入C#泛型命名空间 System.Collec ...

  7. 转载C#泛型集合—Dictionary<K,V>使用技巧

    1.要使用Dictionary集合,需要导入C#泛型命名空间 System.Collections.Generic(程序集:mscorlib) 2.描述 1).从一组键(Key)到一组值(Value) ...

  8. 使用Dictionary泛型集合封装业务逻辑判断 z

    C#2.0 提供了Dictionary 泛型类,它提供了从一组键到一组值的映射.字典中的每个添加项都由一个值及其相关联的键组成.通过键来检索值的速度是非常快的,接近于 O(1),这是因为 Dictio ...

  9. 04.Dictionary字典键值对集合

    Dictionary字典键值对集合和Hashtable键值对集合的功能非常类似, 只是在声明的时候,必须为其制定值的类型. 示例代码: namespace _11.Dictionary字典集合的学习 ...

随机推荐

  1. SVN服务器搭建(1)

    转自:http://www.cnblogs.com/xiaobaihome/archive/2012/03/20/2407610.html SVN服务器搭建和使用(一) Subversion是优秀的版 ...

  2. 【工作笔记三】非常全面的讲解Hosts文件

    原文:http://www.cnblogs.com/zgx/archive/2009/03/10/1408017.html 很奇怪有很多人不知道Hosts是什么东西.在网络病毒日渐盛行的今天,认识Ho ...

  3. 继承,is,as,多态

    继承中的构造方法:1.创建子类对象时,一定会先创建父类对象2.如果调用的子类构造方法没有使用base,就会自动调用父类无参的构造方法,   如果父类没有无参的构造方法就会报错3.如果调用的子类构造方法 ...

  4. Ubuntu开启NFS,挂载根目录

    1.安装NFS server Ubuntu初始状态是没有NFS server的,首先要安装NFS server: $ sudo apt-get install nfs-kernel-server (安 ...

  5. [推荐分享]大量Javascript/JQuery学习教程电子书合集,送给有需要的人

    不收藏是你的错^_^. 经证实,均可免费下载. 资源名称 资源大小   15天学会jQuery(完整版).pdf 274.79 KB   21天学通JavaScript(第2版)-顾宁燕扫描版.pdf ...

  6. 订单处理(c#实现)

    State模式的经典应用场景:订单处理(c#实现) State模式在对象内部状态发生变化的时候,改变自身的行为,这通常是通过切换内部状态对象实现的,对象将自身在各个状态的行为推给了状态对象,从而解开了 ...

  7. oracle实例,数据库,服务器区别

    实例(instance) 实例是一个非固定的,基于内存的基本进程与内存结构.当服务器关闭时,实例就不存在了. 数据库(DataBase) 数据库指固定的,基于磁盘的数据文件,控制文件,日志文件,参数文 ...

  8. IIS7.5下的httpModules设置

    部署到IIS7.5上httpModule不起作用了,原来是iis7里面的网站应用程序池使用了默认的“集成模式”,所以所有的http请求处理都托管给了 IIS,web.config里面的配置就不起效了. ...

  9. intellij idea 学习

      intellij idea是一个java的ide.由jetbrain开发.     intellij idea快捷键 快捷键 说明 备注 Ctrl+N 快速导航到类 类似于Resharper中的C ...

  10. linux下编译php追加enable的方法

    如果我们运行php时发现缺少某个库,在windows环境下很简单,找到.dll 对应的库文件,然后拷贝到 extension 目录下,然后在php.ini 里 去掉 前面的分号或者 追加一行 exte ...