以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]字典的键区分大小写  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=159046)

--  作者:chnfo
--  发布时间:2020/12/11 17:23:00
--  [求助]字典的键区分大小写
设了一个dictionary,使用时意外发现键是区分大小写的,例如a,A都可以加到字典里去。这个算是bug?否则要用ucase,太不方便了
--  作者:有点蓝
--  发布时间:2020/12/12 8:45:00
--  
这个不是bug,本来就这样的,自己处理一下
ToUpper将字符串转换为大写
ToLower将字符串转换为小写

--  作者:chnfo
--  发布时间: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编辑过]

--  作者:有点蓝
--  发布时间:2020/12/12 9:06:00
--  
这个您要向微软反馈了,.net自身的类型,不是我们想改就改的
--  作者:chnfo
--  发布时间: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);


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


--  作者:逛逛
--  发布时间: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
--  发布时间:2020/12/12 9:59:00
--  
那么集合也能这么用吗?有没有类似的方法?
例如
dim lst as new list(of string)(StringComparer.OrdinalIgnoreCase)
[此贴子已经被作者于2020/12/12 10:04:57编辑过]

--  作者:逛逛
--  发布时间: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
--  发布时间:2020/12/12 10:29:00
--  
逛逛,这个字典用起来就好很多。要是能象字典一样list(of string)(不区分大小写)就方便多了
但list用起来挺麻烦的。

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

--  作者:逛逛
--  发布时间: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