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日

相关文章

  • C# 4.0 大数的运算–BigInteger的应用详解

    C#4.0大数的运算–BigInteger的应用详解 对于C#中的int、long等整型变量来说,其取值范围是固定的。如果要进行大数运算,就需要使用BigInteger类。 1. BigInteger基础知识 BigInteger类是System.Numerics命名空间下的一个类,用于处理大整数。它支持基本的算术运算、转换和比较操作。BigInteger…

    C# 2023年5月14日
    00
  • c#中多线程访问winform控件的若干问题小结

    下面我将详细讲解“C# 中多线程访问 WinForm 控件的若干问题小结”的完整攻略,共分以下几个部分: 背景介绍 多线程访问 WinForm 控件的若干问题 不同环境对多线程访问 WinForm 控件的影响 解决多线程访问 WinForm 控件的若干方法 示例 1. 背景介绍 在进行 Windows 程序开发时,我们经常需要使用 C# 和 WinForm …

    C# 2023年5月15日
    00
  • 如何:对Windows 窗体控件进行线程安全调用

    在Windows窗体应用程序中,多线程操作控件是一种常见的需求。但是,由于控件只能在创建它的线程上访问,因此在多线程环境下操作控件可能会导致线程安全问题。本文将介绍如何对Windows窗体控件进行线程安全调用,以避免这些问题。 使用Control.Invoke方法 Control.Invoke方法是.NET Framework提供的一种线程安全调用控件的方法…

    C# 2023年5月15日
    00
  • 解读ASP.NET密码强度验证代码实例分享

    下面是“解读ASP.NET密码强度验证代码实例分享”的完整攻略: 一、引言 在开发 Web 应用程序中,密码必须经过加密以确保用户数据的安全。然而,如果密码过于弱,则会增加被破解的风险。ASP.NET 提供了一种简单的密码强度验证机制,可以帮助开发人员确保密码强度满足最低要求。 二、密码强度验证 密码强度验证可以通过 RegularExpressionVal…

    C# 2023年5月31日
    00
  • C#遍历子目录的方法

    我来为您详细讲解一下“C#遍历子目录的方法”的完整攻略。 首先,我们需要了解如何在C#中遍历文件系统,这可以通过System.IO命名空间下的Directory类实现。 Directory类提供的GetFiles和GetDirectories方法可以在指定目录下获取所有文件和子目录的完整路径。然后,我们可以使用C#中的递归算法来遍历所有的子目录。以下是示例代…

    C# 2023年6月1日
    00
  • C#采用递归实现阶乘的方法

    C#采用递归实现阶乘的方法 递归是一种程序设计方法,其优点是可以让问题变得更简单,同时也有助于降低程序的复杂度。在C#中,使用递归来实现阶乘是一种非常直观的方法。在本文中,我们将讲解如何使用C#来实现递归阶乘的方法。 递归的基本定义 递归(Recursion),是指函数自己调用自己,每次调用时传入不同的变量。通俗点说就是一个函数在执行的过程中会调用自身。 递…

    C# 2023年6月6日
    00
  • C#语言async await工作原理示例解析

    下面是详细讲解“C#语言async await工作原理示例解析”的完整攻略,包括工作原理和示例说明。 C#语言async await工作原理示例解析 async await原理 async和await是C#5.0提供的一种异步编程方式,在处理对IO操作、CPU密集型操作等任务时都可以提供性能的提升。async关键字会告诉编译器当前的方法是一个异步方法,而aw…

    C# 2023年6月6日
    00
  • .NET 实现 JWT 登录验证

    .NET 实现JWT登录认证 在ASP.NET Core应用程序中,使用JWT进行身份验证和授权已成为一种流行的方式。JWT是一种安全的方式,用于在客户端和服务器之间传输用户信息。 添加NuGet包 首先,我们需要添加一些NuGet包来支持JWT身份验证。在您的ASP.NET Core项目中,打开Startup.cs文件,并在ConfigureService…

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