Lookup类

Dictionary<TKey,TValue>类支持每个键关联一个值。Lookup<TKey,TElement>类非常类似于Dictionary<TKey,TValue>类,但把键映射到一个值集合上。这个类在程序集System.Core中 实现,用System.Linq名称空间定义。

Lookup<TKey,TElement>类不能像一般的字典那样创建,而必须调用ToLookup()方法,该方法返回一个Lookup<TKey,TElement>对象。

ToLookup()方法是一个扩展方法,它可以用于实现IEnumerable<T>接口的所有类。在下面的例子中,填充了一个Racer对象列表。因为List<T>类实现了IEnumerable<T>接口,所以可以在赛车手列表上调用ToLookup()方法。这个方法需要一个Func<TSource,TKey>类型的委托,Func<TSource,TKey>类型定义了键的选择器。这里使用lambda表达式r=>r.Country,根据国家来选择赛车手。foreach循环只使用索引器访问来自澳大利亚的赛车手。

using System;
using System.Collections.Generic;
using System.Linq;

namespace Lookup
{
    class Program
    {
        static void Main(string[] args)
        {
            var racers = new List<Racer>();
            racers.Add(new Racer("Jacques","Villeneuve","Canada",11));
            racers.Add(new Racer("Alan","Jones","Australia",12));
            racers.Add(new Racer("Jackie","Stewart","United Kingdom",27));
            racers.Add(new Racer("James","Hunt","United Kingdom",10));
            racers.Add(new Racer("Jack","Brabham","Australia",14));
            var lookupRacers = racers.ToLookup(r=>r.Country);
            foreach(var value in lookupRacers["Australia"]){
                 System.Console.WriteLine(value);
            }            
        }
    }
    public class Racer{
        public string FirstName{get;}
        public string LastName{get;}
        public string Country{get;}
        public int Wins{get;}
        public Racer(string firstName,string lastName,string country,int wins){
            FirstName = firstName;
            LastName = lastName;
            Country = country;
            Wins = wins;

        }
        public override string ToString()=>$"{FirstName} {LastName} {Country} {Wins}";
    }
}

输出如下:

Alan Jones Australia 12
Jack Brabham Australia 14

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值