How to ignore the case sensitivity in List<string>
假设我有这个密码
1 2 3 4 5 6 7 8 | string seachKeyword =""; List<string> sl = new List<string>(); sl.Add("store"); sl.Add("State"); sl.Add("STAMP"); sl.Add("Crawl"); sl.Add("Crow"); List<string> searchResults = sl.FindAll(s => s.Contains(seachKeyword)); |
如何在包含搜索中忽略字母大小写?
谢谢,
使用Linq,这会将新方法添加到.Compare
1 2 3 4 5 6 7 8 | using System.Linq; using System.Collections.Generic; List<string> MyList = new List<string>(); MyList.Add(...) if (MyList.Contains(TestString, StringComparer.CurrentCultureIgnoreCase)) { //found } |
所以大概
1 2 3 4 | using System.Linq; ... List<string> searchResults = sl.FindAll(s => s.Contains(seachKeyword, StringComparer.CurrentCultureIgnoreCase)); |
最好的选择是使用顺序不区分大小写的比较,但是
您可以使用以下方法执行此操作:
1 | sl.FindAll(s => s.IndexOf(searchKeyword, StringComparison.OrdinalIgnoreCase) >= 0); |
最好用扩展方法包装它,例如:
1 2 3 4 | public static bool Contains(this string target, string value, StringComparison comparison) { return target.IndexOf(value, comparison) >= 0; } |
所以你可以使用:
1 | sl.FindAll(s => s.Contains(searchKeyword, StringComparison.OrdinalIgnoreCase)); |
您可以使用
1 2 3 4 | if (myList.Contains(keyword, StringComparer.OrdinalIgnoreCase)) { Console.WriteLine("Keyword Exists"); } |
1 |
最佳解决方案是在执行比较时忽略情况。
1 | List<string> searchResults = sl.FindAll(s => s.IndexOf(seachKeyword, System.StringComparison.OrdinalIgnoreCase) >= 0); |
下面的方法将搜索您需要的关键字,并将所有搜索项插入到新列表中,然后返回新列表。
1 2 3 4 5 6 | private List<string> serchForElement(string searchText, list<string> ListOfitems) { searchText = searchText.ToLower(); List<string> Newlist = (from items in ListOfitems where items.ToLower().Contains(searchText.ToLower()) select items).ToList<string>(); |
返回新列表;}
简单地说,您可以像下面这样使用LINQ查询,
1 2 3 4 5 6 | String str ="StackOverflow"; int IsExist = Mylist.Where( a => a.item.toLower() == str.toLower()).Count() if(IsExist > 0) { //Found } |
findall对整个列表进行枚举。
最好的办法是在找到第一个实例后中断。
bool found=list.firstordefault(x=>string.equals(x,searchKeyword,stringComparison.ordinalIgnoreCase)!= NULL;
对于那些在搜索列表时遇到问题的人,我找到了一个解决方案。
在这个例子中,我搜索一个锯齿状的列表,只获取第一个字符串与参数匹配的列表。
1 2 3 4 5 | List<List<string>> TEMPList = new List<List<string>>(); TEMPList = JaggedList.FindAll(str => str[0].ToLower().Contains(arg.ToLower())); DoSomething(TEMPList); |
你可以用小把戏来对付这个。将所有字符串更改为相同的大小写:大写或小写
list searchresults=sl.findall(s=>s.toupper().contains(seachkeyword.toupper());
其中一个可能(可能不是最好的)是将所有字符串小写放入SL中。然后将search关键字小写。
另一个解决方案是编写另一个方法,将2个字符串参数小写并进行比较