TKey

C# 基础知识系列-7 Linq详解

妖精的绣舞 提交于 2020-11-14 06:38:58
前言 在上一篇中简单介绍了Linq的入门级用法,这一篇尝试讲解一些更加深入的使用方法,与前一篇的结构不一样的地方是,这一篇我会先介绍Linq里的支持方法,然后以实际需求为引导,分别以方法链的形式和类SQL的形式写出来。 前置概念介绍 Predicate<T> 谓词、断言,等价于 Func<T,bool> 即返回bool的表达式 Expression<TDelegate> 表达式树,这个类很关键,但是在这里会细说,我们会讲它的一个特殊的泛型类型: Expression<Func<T,bool>> 这个在某些数据源的查询中十分重要,它代表lambda表达式中一种特殊的表达式,即没有大括号和 return 关键字的那种。 我们先准备两个类 : Student/学生类: /// <summary> /// 学生 /// </summary> public class Student { /// <summary> /// 学号 /// </summary> public int StudentId { get; set; } /// <summary> /// 姓名 /// </summary> public string Name { get; set; } /// <summary> /// 班级 /// </summary> public string Class { get;

基于C#的Dictionary<Tkey,Tvalue>类的CSV文件读写

我是研究僧i 提交于 2020-09-27 04:30:43
基于C#的字典类创建CSV文件读写模块,且本代码暂时只能用于浮点型的逗号文件的创建。 1.核心代码 using System ; using System . Collections . Generic ; using System . IO ; namespace ReadWriteCSV { public class readwriteCSV { public static Dictionary < string , 来源: oschina 链接: https://my.oschina.net/u/4274555/blog/4533300

如何在JavaScript中进行关联数组/哈希

萝らか妹 提交于 2020-08-18 08:17:57
问题: I need to store some statistics using JavaScript in a way like I'd do it in C#: 我需要使用JavaScript来存储一些统计信息,就像在C#中那样: Dictionary<string, int> statistics; statistics["Foo"] = 10; statistics["Goo"] = statistics["Goo"] + 1; statistics.Add("Zoo", 1); Is there an Hashtable or something like Dictionary<TKey, TValue> in JavaScript? JavaScript中是否有 Hashtable 或类似 Dictionary<TKey, TValue> 类的东西? How could I store values in such a way? 如何以这种方式存储值? 解决方案: 参考一: https://stackoom.com/question/54JS/如何在JavaScript中进行关联数组-哈希 参考二: https://oldbug.net/q/54JS/How-to-do-associative-array-hashing-in-JavaScript 来源:

C#分组方式比较

ぐ巨炮叔叔 提交于 2020-08-16 14:25:41
测试方法: private static void Main(string[] args) { var list = new List<Person>(); for (int i = 0; i < 1000000; i++) { list.Add(new Person() { Age = 18, Name = "老石" }); } var time1 = Time(() => { list.GroupBy(t => new { t.Age, t.Name }) .Select(t => t.FirstOrDefault()) .ToList(); }); Console.WriteLine($"分组耗时:{time1}"); var time2 = Time(() => { list.Distinct(d => new { d.Age, d.Name }).ToList(); }); Console.WriteLine($"HashSet耗时:{time2}"); var time3 = Time(() => { list.Distinct((a, b) => a.Age == b.Age && a.Name == b.Name).ToList(); }); Console.WriteLine($"委托耗时:{time3}"); } static long Time(Action

java 泛型详解-绝对是对泛型方法讲解最详细的,没有之一

ぐ巨炮叔叔 提交于 2020-08-13 07:03:11
对java的泛型特性的了解仅限于表面的浅浅一层,直到在学习设计模式时发现有不了解的用法,才想起详细的记录一下。 本文参考java 泛型详解、Java中的泛型方法、 java泛型详解 1. 概述 泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用。 什么是泛型?为什么要使用泛型? 泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢? 顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参), 然后在使用/调用时传入具体的类型(类型实参)。 泛型的本质是为了参数化类型(在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型)。也就是说在泛型使用过程中, 操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。 2. 一个栗子 一个被举了无数次的例子: List arrayList = new ArrayList(); arrayList.add( "aaaa" ); arrayList.add( 100 ); for ( int i = 0; i< arrayList.size();i++ ){ String item = (String)arrayList.get

C#黔驴技巧之去重(Distinct)

对着背影说爱祢 提交于 2020-08-12 20:42:54
前言 关于C#中默认的Distinct方法在什么情况下才能去重,这个就不用我再多讲,针对集合对象去重默认实现将不再满足,于是乎我们需要自定义实现来解决这个问题,接下来我们详细讲解几种常见去重方案,孰好孰歹自行判之。 分组 首先给出我们需要用到的对象,如下: public class Person { public string Name { get ; set ; } public int Age { get ; set ; } } 接下来我们添加100万条数据到集合中,如下: var list = new List<Person> (); for ( int i = 0 ; i < 1000000 ; i++ ) { list.Add( new Person() { Age = 18 , Name = " jeffcky " }); } 接下来我们对年龄和名称进行分组,然后取第一条即可达到去重,如下: list = list.GroupBy(d => new { d.Age, d.Name }) .Select(d => d.FirstOrDefault()) .ToList(); 扩展方法(HashSet去重) 我们知道在C#中HashSet对于重复元素会进行过滤筛选,所以我们写下如下扩展方法,遍历集合元素,最后利用HashSet进行过滤达到去重目的,如下: public

dotnet 字典类找不到 TryAdd 方法

人走茶凉 提交于 2020-08-11 02:31:08
我在给 dotnet 的 runtime 仓库提PR时,小伙伴告诉我可以使用 TryAdd 方法减少判断,但是我修改这个代码发现 100 个自动化测试都失败了,都告诉我没有找到这个方法 在这个更改 https://github.com/dotnet/runtime/pull/37041 有小伙伴告诉我可以使用 TryAdd 方法减少判断,我添加之后发现差不多 100 个自动化测试都失败,提示下面代码 'Dictionary<string, string>' does not contain a definition for 'TryAdd' and no accessible extension method 'TryAdd' accepting a first argument of type 原因是 Microsoft.Extensions.Configuration.CommandLine 这个库使用了 dotnet standard 2.0 版本 <PropertyGroup> <TargetFrameworks>netstandard2.0;</TargetFrameworks> <EnableDefaultItems>true</EnableDefaultItems> </PropertyGroup> 而 TryAdd 方法是在 .NET Standard 2.1

LINQ之路 4:LINQ方法语法

允我心安 提交于 2020-08-09 20:15:34
书写LINQ查询时又两种语法可供选择:方法语法(Fluent Syntax)和查询语法(Query Expression)。 LINQ方法语法是非常灵活和重要的,我们在这里将描述使用链接查询运算符的方式来创建复杂的查询,方法语法的本质是通过扩展方法和Lambda表达式来创建查询。C# 3.0对于LINQ表达式还引入了声明式的查询语法,通过查询语法写出的查询比较类似于SQL查询。本篇会对LINQ方法语法进行详细的介绍。 当然,.NET公共语言运行库(CLR)并不具有查询语法的概念。所以,编译器会在程序编译时把查询表达式转换为方法语法,即对扩展方法的调用。所以使用方法语法会让我们更加接近和了解LINQ的实现和本质,并且一些查询只能表示为方法调用,如检索序列中的最大值、最小值元素的查询,他们在查询语法中就没有对应的实现。但另一方面,查询语法通常会比较简单和易读。不管怎样,这两种语法和互相补充和兼容的,我们可以在一个查询中混合使用方法语法和查询语法。 链接查询运算符 在LINQ介绍中,我们示范了使用单个查询运算符创建的查询。如果需要创建更加复杂的查询,我们可以在表达式之后添加其他查询运算符,产生一个查询链。如下例:查询出所有含有字母”a”的姓名,按长度进行排序,然后把结果全部转换成大写格式。 static void Main( string [] args) { string []

Linux 进程间通信(IPC)总结

半腔热情 提交于 2020-08-09 12:49:44
概述 一个大型的应用系统,往往需要众多进程协作,进程(Linux进程概念见附1)间通信的重要性显而易见。本系列文章阐述了 Linux 环境下的几种主要进程间通信手段。 进程隔离 进程隔离是为保护操作系统中进程互不干扰而设计的一组不同硬件和软件的技术。这个技术是为了避免进程A写入进程B的情况发生。 进程的隔离实现,使用了虚拟地址空间。进程A的虚拟地址和进程B的虚拟地址不同,这样就防止进程A将数据信息写入进程B。 虚拟地址空间 当创建一个进程时,操作系统会为该进程分配一个 4GB 大小的虚拟进程地址空间。之所以是 4GB ,是因为在 32 位的操作系统中,一个指针长度是 4 字节,而 4 字节指针的寻址能力是从 0x00000000~0xFFFFFFFF ,最大值 0xFFFFFFFF 表示的即为 4GB 大小的容量。与虚拟地址空间相对的,还有一个物理地址空间,这个地址空间对应的是真实的物理内存。要注意的是这个 4GB 的地址空间是“虚拟”的,并不是真实存在的,而且每个进程只能访问自己虚拟地址空间中的数据,无法访问别的进程中的数据,通过这种方法实现了进程间的地址隔离。 针对 Linux 操作系统,将最高的1G字节(从虚拟地址 0xC0000000 到 0xFFFFFFFF )供内核使用,称为 内核空间 ,而较低的 3G 字节(从虚拟地址 0x00000000 到0xBFFFFFFF)

C#--Distinct

Deadly 提交于 2020-08-09 10:56:55
C#黔驴技巧之去重(Distinct) 前言 关于C#中默认的Distinct方法在什么情况下才能去重,这个就不用我再多讲,针对集合对象去重默认实现将不再满足,于是乎我们需要自定义实现来解决这个问题,接下来我们详细讲解几种常见去重方案,孰好孰歹自行判之。 分组 首先给出我们需要用到的对象,如下: public class Person { public string Name { get; set; } public int Age { get; set; } } 接下来我们添加100万条数据到集合中,如下: var list = new List<Person>(); for (int i = 0; i < 1000000; i++) { list.Add(new Person() { Age = 18, Name = "jeffcky" }); } 接下来我们对年龄和名称进行分组,然后取第一条即可达到去重,如下: list = list.GroupBy(d => new { d.Age, d.Name }) .Select(d => d.FirstOrDefault()) .ToList(); 扩展方法(HashSet去重) 我们知道在C#中HashSet对于重复元素会进行过滤筛选,所以我们写下如下扩展方法,遍历集合元素,最后利用HashSet进行过滤达到去重目的,如下: