c#linq如果项目在列表中并从列表中获取匹配的项目

时间:2019-05-27 15:24:36

标签: c# list linq contains

如果我的列表包含:英国猫,法国猫,日本狗,西班牙狗

我有一个项目:狗

我不仅要查看列表中是否包含我的物品,还要返回匹配的物品,所以我希望:日本犬,西班牙犬

我已经使用以下代码了解该项目是否在列表中:

if (myList.Any(myItem.ToLower().Contains)) { }

3 个答案:

答案 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扩展名和正则表达式(例如,

)对它们进行排序,来进行更多高级linq工作
var sortedbyDogs 
            = animals.ToLookup(type => Regex.IsMatch(type, "dog", RegexOptions.IgnoreCase));

按如下方式在内存中分组:

To lookup grouping result

然后只提取诸如

的猫
var cats = sortedbyDogs[false].ToList()

List string of cats

然后为狗传递true


但是为什么要用布尔值将其分割,如果还有更多的动物呢?让我们将狐猴添加到列表中,例如… "french cat", "Columbian Lemur" };,我们这样做:

var sorted = animals.ToLookup(type => Regex.Match(type, 
                                                  "(dog|cat|lemur)", 
                                                  RegexOptions.IgnoreCase).Value);

enter image description here

然后拿起我们的猫,这是代码:

sorted["cat"].ToList()