Foxtable(狐表)用户栏目专家坐堂 → [求助]字典的键区分大小写


  共有3442人关注过本帖树形打印复制链接

主题:[求助]字典的键区分大小写

帅哥哟,离线,有人找我吗?
chnfo
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2191 积分:18001 威望:0 精华:0 注册:2011/11/26 20:21:00
[求助]字典的键区分大小写  发帖心情 Post By:2020/12/11 17:23:00 [只看该作者]

设了一个dictionary,使用时意外发现键是区分大小写的,例如a,A都可以加到字典里去。这个算是bug?否则要用ucase,太不方便了

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106012 积分:539147 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/12/12 8:45:00 [只看该作者]

这个不是bug,本来就这样的,自己处理一下
ToUpper将字符串转换为大写
ToLower将字符串转换为小写

 回到顶部
帅哥哟,离线,有人找我吗?
chnfo
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2191 积分:18001 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2020/12/12 8:56:00 [只看该作者]

Dim lst As new List(of String)
If lst.Contains("a") = False Then 
lst.Add("a")
End If 

If lst.Contains("A") = False Then 
lst.Add("A")
End If 

For Each x As String In Lst
Output.Show(x)
Next

显示出两行:a和A

实际用dictionary测试也是一样的

但在实际处理的时候,例如要增量式导入外部数据,有A和a,一般会视同为同一个数据

每次都要这样转换,还挺麻烦的。毕竟用户在处理excel源数据的时候,要求统一先转换为大写或小写,对用户来说不方便啊
[此贴子已经被作者于2020/12/12 8:56:52编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106012 积分:539147 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/12/12 9:06:00 [只看该作者]

这个您要向微软反馈了,.net自身的类型,不是我们想改就改的

 回到顶部
帅哥哟,离线,有人找我吗?
chnfo
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2191 积分:18001 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2020/12/12 9:10:00 [只看该作者]

网上看到一个帖,说是在C#中可以构建一个新类

C#中的Dictionary类,默认key是区分大小写的

在C#中定义一个Dictionary

    Dictionary<string,string> dictionary = new Dictionary<string,string>();

    dictionary.Add("a","b");

    dictionary.Add("A","B");//A与a是不同的

 

但如果想要创建不区分大小写的Dictionary类,也不是没有办法:

使用这样的构造方法就可以了:

Dictionary<string, string> sysHash = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);


请教这个在狐表中能套用吗?该怎么用呢?


 回到顶部
帅哥哟,离线,有人找我吗?
逛逛
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:1693 积分:12117 威望:0 精华:7 注册:2013/7/11 10:52:00
  发帖心情 Post By:2020/12/12 9:37:00 [只看该作者]

Dim o As  new Dictionary(of String, String)(StringComparer.OrdinalIgnoreCase)
o.Add("a","1")
o.Add("A","2")

 回到顶部
帅哥哟,离线,有人找我吗?
chnfo
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2191 积分:18001 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2020/12/12 9:59:00 [只看该作者]

那么集合也能这么用吗?有没有类似的方法?
例如
dim lst as new list(of string)(StringComparer.OrdinalIgnoreCase)
[此贴子已经被作者于2020/12/12 10:04:57编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
逛逛
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:1693 积分:12117 威望:0 精华:7 注册:2013/7/11 10:52:00
  发帖心情 Post By:2020/12/12 10:14:00 [只看该作者]

Dim lst As new List(of String)
If lst.Contains("a",StringComparer.OrdinalIgnoreCase) = False Then 
lst.Add("a")
End If 


If lst.Contains("A",StringComparer.OrdinalIgnoreCase) = False Then 
lst.Add("A")
End If 


For Each x As String In Lst
Output.Show(x)
Next

 回到顶部
帅哥哟,离线,有人找我吗?
chnfo
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2191 积分:18001 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2020/12/12 10:29:00 [只看该作者]

逛逛,这个字典用起来就好很多。要是能象字典一样list(of string)(不区分大小写)就方便多了
但list用起来挺麻烦的。

[此贴子已经被作者于2020/12/12 10:47:13编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
逛逛
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:1693 积分:12117 威望:0 精华:7 注册:2013/7/11 10:52:00
  发帖心情 Post By:2020/12/12 10:52:00 [只看该作者]

HashSet
写代码时先用List做,有提示

Dim lst As new  HashSet(of String)(StringComparer.OrdinalIgnoreCase)
'Dim lst As new List(of String)
lst.Add("a")
lst.Add("A")
 
For Each x As String In Lst
Output.Show(x)
Next


 回到顶部
总数 11 1 2 下一页