HashTable has different value for same key. Key <s> has 1 and trying to add value 4

今天在处理语料的时候,总是遇到上面的这个问题,我总以为是我的语料里面有重复的词语出现,但是用以前的编译过的程序进行去重的时候发现,文本的总行数是不变的,也就是说,语料里面并没有重复性的词语或字,可是,为什么总会出现这样的情况呢?
我回想以前处理语料出现的种种错误,翻看以前的日志,突然意识到可能是编码搞混了,在https://blog.csdn.net/qq_32113189/article/details/79772618这篇博客里面提到了有关语料处理的问题,里面提到了“utf-8格式”和“utf-8无BOM格式”两种格式,我才想到,原来我的语料都被我改成了“utf-8格式”,而程序所需要的是“utf-8无BOM格式”,这点,希望大家能够注意一下,不要被我们的惯性思维搞混,有的时候,可能是因为编码格式的问题,而怀疑我们本身的语料、甚至是以前能够编译好的代码的问题,接下来,我来普及一下这两种格式的区别:
utf-8+bom比utf-8多了三个字节前缀:0xEF0xBB0xBF,有这三个字节前缀的文本或字符串,程序可以自动判断它为utf-8格式,并按照utf-8格式来解析文本或字符串,否则,一个文本或者字符串在未知编码的情况下,需要按照字符编码规范去一个个验证。
以上我们可知,两种格式之间相差了三个字节,这会导致我们的程序直接编译失败,因此,在我们搞懂如何处理数据之前,一定要记得查看程序需要的编码格式,否则,一旦细节被忽略,我们的工作将会停滞,甚至导致最后的工作功亏一篑。
希望大家有什么处理语料更多的经验和拿出来和大家一起分享,小编也希望能够在大家以往的经验中汲取更好的能力。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是对代码的优化: ```csharp Hashtable htCombo = ComboHelper.GetAllCombo(); List<ComboEntity> combList = new List<ComboEntity>(); foreach (DictionaryEntry de in Items) { if (htCombo.ContainsKey(de.Value)) { combList.Add((ComboEntity)htCombo[de.Value]); } } combList = combList.OrderBy(t => t.UPCOMBOTYPE).ThenBy(t => t.sn).ThenBy(t => t.COMBNAME).ToList(); List<ComboEntity> tempList = new List<ComboEntity>(); List<ComboEntity> combListNew = new List<ComboEntity>(); ComboEntity temp = null; foreach (ComboEntity entity in combList) { if (temp != null && temp.UPCOMBOTYPE != entity.UPCOMBOTYPE) { tempList.Sort((a, b) => { int result = a.sn.CompareTo(b.sn); if (result == 0) { result = a.COMBNAME.CompareTo(b.COMBNAME); } return result; }); combListNew.AddRange(tempList); tempList.Clear(); } tempList.Add(entity); temp = entity; } tempList.Sort((a, b) => { int result = a.sn.CompareTo(b.sn); if (result == 0) { result = a.COMBNAME.CompareTo(b.COMBNAME); } return result; }); combListNew.AddRange(tempList); Items.Clear(); bool showcombocode = false; DataSet dsshow = new SSqlHelper().ReturnDataSet("select C_VALUE from SYS_CONFIG where C_NAME='showcombocode'"); if (dsshow != null && dsshow.Tables.Count > 0 && dsshow.Tables[0].Rows.Count > 0 && dsshow.Tables[0].Rows[0]["C_VALUE"].ToString() == "1") { showcombocode = true; } foreach (ComboEntity entity in combListNew) { string key = entity.COMBNAME; if (showcombocode) { key += " " + entity.COMBTYPE; } Items.Add(new DictionaryEntry(key, entity.GUID)); } ``` 优化后的代码主要进行了以下改进: 1. 使用foreach替代for循环来遍历combList列表,更加简洁易读。 2. 对tempList进行排序时,使用Lambda表达式替代原先的OrderBy方法,提高效率。 3. 将Items的清空操作提前到需要使用它之前,避免了重复的操作。 4. 对combListNew的添加操作使用AddRange替代for循环,更加简洁。 5. 将字符串拼接操作提前到循环外部,并使用showcombocode布尔值来控制是否拼接COMBTYPE。 综上所述,通过对代码的优化,使得代码更加简洁、高效、易读。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值