开放的编程资料库

当前位置:我爱分享网 > C#教程 > 正文

C# 过滤器列表

C#过滤器列表教程展示了如何在C#中过滤列表。C#教程是C#语言的综合教程。

本教程展示了几种用C#语言过滤列表的方法。我们使用迭代、LINQ和内置的FindAll方法。

带迭代的C#过滤器列表

在第一个示例中,我们使用foreach循环来过滤列表。

var words = new List<string> { "sky", "rock", "forest", "new",
    "falcon", "jewelry" };

var filtered = new List<string>();

foreach (var word in words)
{
    if (word.Length == 3)
    {
        filtered.Add(word);
    }
}

Console.WriteLine(string.Join(',', filtered));

该示例过滤掉所有包含三个字符的单词。

var words = new List<string> { "sky", "rock", "forest", "new",
    "falcon", "jewelry" };

我们有一个单词列表。目标是找出所有三个字母的单词。

var filtered = new List<string>();

一个新的filtered列表被创建。所有符合条件的词都会被添加到列表中。

foreach (var word in words)
{
    if (word.Length == 3)
    {
        filtered.Add(word);
    }
}

我们在foreach循环中遍历单词列表。所有匹配if条件的词都被添加到filtered列表中。

Console.WriteLine(string.Join(',', filtered));

我们将filtered列表的内容显示到控制台。

$ dotnet run
sky,new

使用FindAll的C#过滤器列表

在下面的示例中,我们使用内置的FindAll方法过滤列表。

var vals = new List<int> {-1, -3, 0, 1, 3, 2, 9, -4};

List<int> filtered = vals.FindAll(e => e > 0);

Console.WriteLine(string.Join(',', filtered));

该示例找出所有大于零的整数值。

List<int> filtered = vals.FindAll(e => e > 0);

FindAll方法检索与指定谓词定义的条件匹配的所有元素。

$ dotnet run
1,3,2,9

带有LINQ查询表达式的C#过滤器列表

以下示例使用LINQ查询表达式来筛选列表。

var words = new List<string> { "sky", "rock", "forest", "new",
        "falcon", "jewelry" };

var query = from word in words
            where word.Length == 3
            select word;

foreach (var word in query)
{
    Console.WriteLine(word);
}

该示例选择所有包含三个字符的单词。

使用LINQWhere的C#过滤器列表

下一个示例使用LINQ的Where方法过滤列表。

var vals = new List<int> {-1, -3, 0, 1, 3, 2, 9, -4};

List<int> filtered = vals.Where(x => x > 0).ToList();

Console.WriteLine(string.Join(',', filtered));

该示例过滤掉所有正值。

List<int> filtered = vals.Where(x => x > 0).ToList();

Where方法根据谓词过滤一系列值。

C#过滤对象列表

在下面的示例中,我们使用LINQ查询表达式筛选汽车对象列表。

var cars = new List<Car>
{
    new ("Audi", 52642),
    new ("Mercedes", 57127),
    new ("Skoda", 9000),
    new ("Volvo", 29000),
    new ("Bentley", 350000),
    new ("Citroen", 21000),
    new ("Hummer", 41400),
    new ("Volkswagen", 21601)
};

foreach (var car in from car in cars
                    where car.Price > 9000 && car.Price < 50000
                    select new { car.Name, car.Price })
{
    Console.WriteLine($"{car.Name} {car.Price}");
}

record Car(string Name, int Price);

该示例选择了价格在9000到50000之间的所有汽车。

$ dotnet run
Volvo 29000
Citroen 21000
Hummer 41400
Volkswagen 21600

C#使用Func过滤数组

在示例中,我们使用Func委托来过滤一组用户。

User[] users =
{
  new (1, "John", "London", "2001-04-01"),
  new (2, "Lenny", "New York", "1997-12-11"),
  new (3, "Andrew", "Boston", "1987-02-22"),
  new (4, "Peter", "Prague", "1936-03-24"),
  new (5, "Anna", "Bratislava", "1973-11-18"),
  new (6, "Albert", "Bratislava", "1940-12-11"),
  new (7, "Adam", "Trnava", "1983-12-01"),
  new (8, "Robert", "Bratislava", "1935-05-15"),
  new (9, "Robert", "Prague", "1998-03-14"),
};

var city = "Bratislava";
Func<User, bool> livesIn = e => e.City == city;

var res = users.Where(livesIn);

foreach (var e in res)
{
    Console.WriteLine(e);
}

record User(int id, string Name, string City, string DateOfBirth);

从用户数组中,我们找到了居住在布拉迪斯拉发的用户。

var city = "Bratislava";
Func<User, bool> livesIn = e => e.City == city;

在谓词中,一个返回布尔值的函数,我们测试所有City属性等于city变量的用户对象。

var res = users.Where(livesIn);

我们将livesIn谓词传递给Where方法。

$ dotnet run
User { id = 5, Name = Anna, City = Bratislava, DateOfBirth = 1973-11-18 }
User { id = 6, Name = Albert, City = Bratislava, DateOfBirth = 1940-12-11 }
User { id = 8, Name = Robert, City = Bratislava, DateOfBirth = 1935-05-15 }

在本文中,我们展示了如何在C#中过滤列表。

列出所有C#教程。

未经允许不得转载:我爱分享网 » C# 过滤器列表

感觉很棒!可以赞赏支持我哟~

赞(0) 打赏