如果我的列表包含:英国猫,法国猫,日本狗,西班牙狗
我有一个项目:狗
我不仅要查看列表中是否包含我的物品,还要返回匹配的物品,所以我希望:日本犬,西班牙犬
我已经使用以下代码了解该项目是否在列表中:
if (myList.Any(myItem.ToLower().Contains)) { }
答案 0 :(得分:4)
我认为您正在使用where
子句来寻找类似的内容:
string filter = "dog";
IEnumerable<string> filteredItems = myList.Where(m => m.ToLower().Contains(filter.ToLower()));
答案 1 :(得分:3)
var myList = new List<string>() { " japanese dog", "spanish dog", "english cat", "french cat" };
var dog = "Dog";
if (myList.Any(t=>t.Contains(dog.ToLower()))) {
var result = myList.Where(t => t.Contains(dog.ToLower())).ToList();
}
答案 2 :(得分:1)
我喜欢使用正则表达式,并喜欢用狗的方式:
var animals = new List<string>()
{ "japanese dog", "spanish dog", "english cat", "french cat" };
var dogs = animals.Where(type => Regex.IsMatch(type, "dog", RegexOptions.IgnoreCase))
.ToList();
// Returns {"japanese dog", "spanish dog" }
您可能会问为什么正则表达式,因为它灵活而强大...让我展示一下:
让我们通过使用ToLookup
扩展名和正则表达式(例如,
var sortedbyDogs
= animals.ToLookup(type => Regex.IsMatch(type, "dog", RegexOptions.IgnoreCase));
按如下方式在内存中分组:
然后只提取诸如
的猫var cats = sortedbyDogs[false].ToList()
然后为狗传递true
。
但是为什么要用布尔值将其分割,如果还有更多的动物呢?让我们将狐猴添加到列表中,例如… "french cat", "Columbian Lemur" };
,我们这样做:
var sorted = animals.ToLookup(type => Regex.Match(type,
"(dog|cat|lemur)",
RegexOptions.IgnoreCase).Value);
然后拿起我们的猫,这是代码:
sorted["cat"].ToList()