如何忽略List <string>中的区分大小写
让我们说我有这个代码
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));
如何忽略包含search中的字母大小写?
谢谢,
最好的select是使用序号不区分大小写的比较,但Contains
方法不支持它。
您可以使用以下来执行此操作:
sl.FindAll(s => s.IndexOf(searchKeyword, StringComparison.OrdinalIgnoreCase) >= 0);
最好用一个扩展方法来包装它,比如:
public static bool Contains(this string target, string value, StringComparison comparison) { return target.IndexOf(value, comparison) >= 0; }
所以你可以使用:
sl.FindAll(s => s.Contains(searchKeyword, StringComparison.OrdinalIgnoreCase));
使用Linq,这为.Compare增加了一个新的方法
using System.Linq; using System.Collections.Generic; List<string> MyList = new List<string>(); MyList.Add(...) if (MyList.Contains(TestString, StringComparer.CurrentCultureIgnoreCase)) { //found }
所以推测
using System.Linq; ... List<string> searchResults = sl.FindAll(s => s.Contains(seachKeyword, StringComparer.CurrentCultureIgnoreCase));
您可以通过提供不区分大小写的string相等比较器来使用Contains
,如下所示:
if (myList.Contains(keyword, StringComparer.OrdinalIgnoreCase)) { Console.WriteLine("Keyword Exists"); }
最佳解决scheme是在执行比较时忽略该情况
List<string> searchResults = sl.FindAll(s => s.IndexOf(seachKeyword, System.StringComparison.OrdinalIgnoreCase) >= 0);
StringComparer.CurrentCultureIgnoreCase is a better approach instead of using indexOf.
你可以应用这个小技巧。
将所有string更改为相同的大小写 : 大写或小写
List searchResults = sl.FindAll(s => s.ToUpper(). Contains( seachKeyword.ToUpper() ));
对于那些在searchLIST时遇到问题的人,我find了一个解决scheme。
在这个例子中,我正在searchJagged List,只抓取具有与参数匹配的第一个string的列表。
List<List<string>> TEMPList = new List<List<string>>(); TEMPList = JaggedList.FindAll(str => str[0].ToLower().Contains(arg.ToLower())); DoSomething(TEMPList);
FindAll枚举整个列表。
find第一个例子后,更好的方法是打破。
bool found = list.FirstOrDefault(x => String.Equals(x,searchKeyWord,Stringcomparison.OrdinalIgnoreCase)!= null;
下面的方法将search您需要的关键字,并将所有search到的项目插入一个新的列表,然后返回新的列表。
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>();
返回新的列表; }
一个可能的(可能不是最好的),是你小写所有的string放入sl。 然后你小写searchKeyword。
另一种解决方法是编写另一个小写string参数的方法,并将其进行比较