C#Dictionary集合的使用
题目:输入一串字符串字母,比如: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集合的使用的更多相关文章
- Dictionary集合运用
Dictionary基础定义: 从一组键(key)到一组值(value)的映射,每一个添加项都是由一个值及其相关联的键组成: 任何键都必须是唯一的: 键不能为空引用的null(VB中的Nothing) ...
- Collection was modified; enumeration operation may not execute Dictionary 集合已修改;可能无法执行枚举操作
public void ForeachDic() { Dictionary dic = new Dictionary(); dic.Add("1", 10); dic.Add(&q ...
- Dictionary集合 字典
1 Dictionary<int, string> dic = new Dictionary<int, string>(); dic.Add(,"张三"); ...
- C#泛型集合之Dictionary<k, v>使用技巧
1.要使用Dictionary集合,需要导入C#泛型命名空间 System.Collections.Generic(程序集:mscorlib) 2.描述 1).从一组键(Key)到一组值(Value) ...
- ASP.NET MVC中默认Model Binder绑定Action参数为List、Dictionary等集合的实例
在实际的ASP.NET mvc项目开发中,有时会遇到一个参数是一个List.Dictionary等集合类型的情况,默认的情况ASP.NET MVC框架是怎么为我们绑定ASP.NET MVC的Actio ...
- C#泛型集合—Dictionary<K,V>使用技巧
转载:http://blog.csdn.net/a125138/article/details/7742022 1.要使用Dictionary集合,需要导入C#泛型命名空间 System.Collec ...
- 转载C#泛型集合—Dictionary<K,V>使用技巧
1.要使用Dictionary集合,需要导入C#泛型命名空间 System.Collections.Generic(程序集:mscorlib) 2.描述 1).从一组键(Key)到一组值(Value) ...
- 使用Dictionary泛型集合封装业务逻辑判断 z
C#2.0 提供了Dictionary 泛型类,它提供了从一组键到一组值的映射.字典中的每个添加项都由一个值及其相关联的键组成.通过键来检索值的速度是非常快的,接近于 O(1),这是因为 Dictio ...
- 04.Dictionary字典键值对集合
Dictionary字典键值对集合和Hashtable键值对集合的功能非常类似, 只是在声明的时候,必须为其制定值的类型. 示例代码: namespace _11.Dictionary字典集合的学习 ...
随机推荐
- java这些东西发展(4)-------无穷time of error
今天,有些郁闷的心情啊.空指针下午折磨.到现在为止仍然没有得到解决,专家的招募结果没拿到,我们必须继续自己的,进而改变一点点一点点地找到它,但现在我不想搞,准备回家,这浪费了一个多小时,之前记录的下一 ...
- DynamicResource与StaticResource的区别
原文:DynamicResource与StaticResource的区别 2008-06-20 12:16:12 静态资源在第一次编译后即确定其对象或值,之后不能对其进行修改.动态资源则是在运行时决定 ...
- Android 5.0自定义动画
材料设计中的动画对用户的操作给予了反馈,并且在与应用交互时提供了持续的可见性.材料主题提供了一些按钮动画和活动过渡,Android 5.0允许你自定义动画并且可以创建新的动画: Touch Feedb ...
- C#动态表达式计算(续1)
距上一帖近五天时间,让大家久等了,没想到关注这个话题的也不少人,正如有同志所说的想解决该问题其实是有太多的解决方法,比如动态构造类编译.调用vbscript或者可以采用javascript解析引擎或者 ...
- Julia is a high-level, high-performance dynamic programming language for technical computing, with syntax that is familiar to users of other technical
http://julialang.org/ julia | source | downloads | docs | blog | community | teaching | publications ...
- Fitnesse集成TestLink
TestLink作为开源测试管理工具,可以进行测试工程.测试计划以及执行计划的管理,而且TestLink团队提供了XML-PRC的接口供第三方工具调用,接口支持程度也比较好. Fitnesse作为开源 ...
- Design Thinking BrainWalk
Design Thinking Design Thinking Workshop @ Agile Tour 2013 Shanghai 摘要: 设计思维工作坊上周日在2013年敏捷之旅上海站,引导 ...
- Android JNI(NDK)开发总结
早就知道Java有个jni可以调用本地化代码,一直没有动力去研究它,现在公司想通过在Android中调用本地化代码来申请较多的内存以突破Android对单个进程的内存限制,这确实是可行的:我的Nexu ...
- 适合编写代码的字体 Source Code Pro
今天看到博客园一篇文章,介绍了一种出身自 Adobe 的适合编码的字体,等宽,支持ClearType等,试用一下吧 项目地址:https://github.com/adobe/source-code- ...
- 用django搭建一个简易blog系统(翻译)(一)
Django 入门 原始网址: http://www.creativebloq.com/netmag/get-started-django-7132932 代码:https://github.com/ ...