C#探秘系列(一)——ToDictionary,ToLookup

C#探秘系列(一)——ToDictionary,ToLookup

概述

ToDictionary和ToLookup都是基于IEnumerable的扩展方法,可以将IEnumerable转换为Dictionary和ILookup。两个方法所能承载的数据结构不同,具体使用也有细微差别,下面我们来逐一讲解。

ToDictionary

描述

ToDictionary将IEnumerable中的元素转换为一个新的Dictionary对象,通过指定键选择器函数从元素中提取键,并通过指定元素选择器函数从元素中提取值。

语法

public static Dictionary<TKey, TElement> ToDictionary<TSource, TKey, TElement>(
    this IEnumerable<TSource> source,
    Func<TSource, TKey> keySelector,
    Func<TSource, TElement> elementSelector
)

示例

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

class Program
{
    static void Main(string[] args)
    {
        List<Person> persons = new List<Person>()
        {
            new Person() { Id = 1, Name = "张三" },
            new Person() { Id = 2, Name = "李四" },
            new Person() { Id = 3, Name = "王五" },
        };

        Dictionary<int, string> personDict = 
            persons.ToDictionary(p => p.Id, p => p.Name);

        foreach (KeyValuePair<int, string> kvp in personDict)
        {
            Console.WriteLine("Key: {0}, Value: {1}", kvp.Key, kvp.Value);
        }
    }
}

class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
}

输出结果:

Key: 1, Value: 张三
Key: 2, Value: 李四
Key: 3, Value: 王五

ToLookup

描述

ToLookup将IEnumerable中的元素转换为一个新的ILookup对象,通过指定键选择器函数从元素中提取键,并通过指定元素选择器函数从元素中提取值。

语法

public static ILookup<TKey, TElement> ToLookup<TSource, TKey, TElement>(
    this IEnumerable<TSource> source,
    Func<TSource, TKey> keySelector,
    Func<TSource, TElement> elementSelector
)

示例

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

class Program
{
    static void Main(string[] args)
    {
        List<Person> persons = new List<Person>()
        {
            new Person() { Id = 1, Name = "张三" },
            new Person() { Id = 2, Name = "李四" },
            new Person() { Id = 3, Name = "张三" },
        };

        ILookup<string, Person> personLookup = 
            persons.ToLookup(p => p.Name, p => p);

        foreach (Person p in personLookup["张三"])
        {
            Console.WriteLine(p.Id);
        }
    }
}

class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
}

输出结果:

1
3

总结

ToDictionary和ToLookup都是非常常用的方法,利用它们可以将IEnumerable中的数据转换为Dictionary或ILookup,方便操作和使用。要注意的是,ToLookup返回的是ILookup而不是Dictionary,ILookup可以包含重复的键,而Dictionary不行。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#探秘系列(一)——ToDictionary,ToLookup - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • 关于正则表达式基本语法的应用详解(必看篇)

    关于正则表达式基本语法的应用详解(必看篇) 1. 正则表达式(RegExp)是什么? 正则表达式(RegExp,又称正规表达式、正则表示式、正则表达式式、规则表达式等)是计算机科学中的一个概念。它可以用来匹配特定模式的文本,并对符合条件的文本进行操作。 2. 正则表达式的基本语法 2.1 字符组 使用方括号表示,可以匹配括号内的任意字符。 示例: var r…

    C# 2023年6月7日
    00
  • .NET应用程序集DLL与EXE工作机制及原理介绍

    下面是详细讲解“.NET应用程序集DLL与EXE工作机制及原理介绍”的完整攻略。 一、简介 .NET应用程序集是指在.NET平台下开发的一种可复用的代码和资源的集合,由DLL(动态链接库)和EXE(可执行文件)两种文件类型组成,其中DLL是库文件,EXE是应用程序文件。在.NET中,应用程序的逻辑和业务代码通常是以DLL的形式组织,而实际的应用程序则通过一个…

    C# 2023年6月3日
    00
  • 基于C#中IDisposable与IEnumerable、IEnumerator的应用

    接下来我将详细讲解基于C#中IDisposable与IEnumerable、IEnumerator的应用,包括它的概念、用处及实际应用等相关知识。 一、IDisposable 在C#中,IDisposable是一个接口,它定义了一种机制,用于释放非托管资源以及可选地释放托管资源。一个类通过实现IDisposable接口,并提供Dispose方法来实现资源的释…

    C# 2023年5月15日
    00
  • .NET Core系列之MemoryCache 初识

    .NET Core系列之MemoryCache 初识 在本攻略中,我们将详细讲解.NET Core中的MemoryCache,包括其基本概念、使用方法和示例说明。 MemoryCache简介 MemoryCache是.NET Core中的一个内存缓存库,可以用于缓存应用程序中的数据。它提供了一种快速、可靠和高效的方式来缓存数据,以提高应用程序的性能和响应速度…

    C# 2023年5月16日
    00
  • Vs2022环境下安装低版本.net framework的实现步骤

    下面是详细的“Vs2022环境下安装低版本.net framework的实现步骤”的攻略。 环境准备 首先,我们需要准备好以下一些环境: Visual Studio 2022 低版本的 .NET Framework 安装包(例如 .NET Framework 3.5) 安装低版本的 .NET Framework 在 Windows 系统中,打开“控制面板”,…

    C# 2023年6月3日
    00
  • C#实现炫酷启动图-动态进度条效果

    下面就讲解一下“C#实现炫酷启动图-动态进度条效果”的完整攻略。 1. 动态进度条效果是什么? 动态进度条是指在程序启动的时候,会出现一个进度条,进度条随着程序的启动过程不断变化,最终到达100%的效果。这种效果可以让启动过程更具有视觉和动态感,能够吸引用户的注意力,让用户感觉程序更加高效。 2. C#实现动态进度条效果步骤 下面我来详细讲解一下如何在C#中…

    C# 2023年6月6日
    00
  • ASP.NET缓存 方法和最佳实践

    当网站面临高并发访问或者数据处理成本太高的时候,ASP.NET缓存就成为了处理这类问题的有效工具。本文将详细讲解ASP.NET缓存的方法和最佳实践,以帮助读者更好的利用ASP.NET缓存提升网站性能。 基础知识 什么是ASP.NET缓存? ASP.NET缓存是一种内存缓存机制,它可以存储和检索各种类型的数据,如数据源、页面输出、分布式应用程序和对象等。使用A…

    C# 2023年6月1日
    00
  • c# WinForm 窗体之间传值的几种方式(小结)

    C# WinForm 窗体之间传值的几种方式(小结)是一篇关于C# WinForm中多个窗体之间进行数据传输的教程。下面,我将详细讲解这篇攻略的内容。 概述 该文主要讲解如何在 C# WinForm 中实现窗体之间的数据传输,我们知道在 Windows 系统下的许多应用程序中,除了主窗体以外可能会有一些其他的功能窗体,如登录窗体、设置窗体、信息弹窗等等,这些…

    C# 2023年6月7日
    00
合作推广
合作推广
分享本页
返回顶部