根据指定的键从集合中创建键值对集合

假如有一个对象的集合,想转换成键值对,然后通过键去访问值,通常这个对象有一个唯一标识"Id"

public class Student
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Phone { get; set; }
}
IEnumerable<Student> students = new List<Student>()
{
    new Student(){Id = 1, Name = "关羽", Phone = "13648965479"},
    new Student(){Id = 2, Name = "张飞", Phone = "13648965479"},
    new Student(){Id = 3, Name = "赵云", Phone = "13648965479"},
    new Student(){Id = 4, Name = "马超", Phone = "13648965479"},
    new Student(){Id = 5, Name = "黄忠", Phone = "13648965479"}
};

可以根据这个students集合去创建一个键值对

Dictionary<int, Student> dic = students.ToDictionary(u => u.Id);

键就是Id属性,值就是Student对象。有些时候值没必要存Student对象,只需要Name就可以了

Dictionary<int, string> dic = students.ToDictionary(u => u.Id, u => u.Name);

需要注意的两个地方:
1、Id不能有重复
2、键值对不能通过索引0取第一条数据 dic[0] 这样写是不对的

时间: 2024-11-01 18:47:40

根据指定的键从集合中创建键值对集合的相关文章

C#不允许在foreach循环中改变数组或集合中元素的值(注:成员的值不受影响)

C#不允许在foreach循环中改变数组或集合中元素的值(注:成员的值不受影响),如以下代码将无法通过编译. foreach (int x in myArray) { x++; //错误代码,因为改变了元素的值 Console.WriteLine(x); } 如果要让自定义的数据类型支持foreach循环,则该类型必须实现IEnumerable<T>接口,且存在对应此列表的IEnumerator<T>实现. 实际上,在.Net的底层(IL语言层面)而言, foreach (var

map集合中的键值对对象遍历

package com.day15.Map; import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Set; /* * map集合中的第二种遍历方式 */public class MapFour { public static void main(String[] args) { Map<String, Integer> ma=new HashMap<>();

silverlight,动态数据集合中,移除动态集合自身的内容

在xaml的页面上创建一个x:Name为_list1的ListBox,其中ListBox里面的每一项是ListBoxItem if (_list1.SelectedItem == null)//如果_list1的选中项为空的情况下进行返回 { return; } else { var list = _list1.SelectedItems;//获取_list1的所有的选中项 List<ListBoxItem> OutList = new List<ListBoxItem>();//

获取map集合中的键和值

1.根据键找值 public static void main(String[] args) { //创建集合对象 Map<String ,Integer> map=new HashMap<String ,Integer>(); //创建元素并添加到集合 map.put("hello", 1); map.put("world", 2); Set <String> set=map.keySet(); for(String key:s

More is better(hdu 1856 计算并查集集合中元素个数最多的集合)

More is better Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 327680/102400 K (Java/Others)Total Submission(s): 21167    Accepted Submission(s): 7720 Problem Description Mr Wang wants some boys to help him with a project. Because the project

ES6中的Set和Map集合

前面的话 在ES6标准制定以前,由于可选的集合类型有限,数组使用的又是数值型索引,因而经常被用于创建队列和栈.如果需要使用非数值型索引,就会用非数组对象创建所需的数据结构,而这就是Set集合与Map集合的早期实现.本文将详细介绍ES6中的set和map集合 引入 Set集合是一种无重复元素的列表,开发者们一般不会逐一读取数组中的元素,也不太可能逐一访问Set集合中的每个元素,通常的做法是检测给定的值在某个集合中是否存在 Map集合内含多组键值对,集合中每个元素分别存放着可访问的键名和它对应的值,

HashTable键值对集合

<1> using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections; namespace HashTable键值对集合 { class Program { static void Main(string[] args) { //创建了一个键值对集合对象 Hashtable ht = new Hashtable(); //-------

.NET中的范型与集合

    在学习设计模式的时候,我们用到了范型,在VB.NET机房重构的时候,我们又用到了范型,感觉范型就像一个集合Collections,而且集合ArrayList()非常好用,它可以盛放许多类型的数据(里面涉及到了拆箱与装箱),那么,范型与ArrayList()又有什么渊源哪?下面我讲一下C#中的范型与集合ArrayList()的区别. 一.泛型简介: 泛型(Generic Type)是.NET Framework2.0最强大的功能之一.泛型的主要思想是将算法与数据结构完全分离开,使得一次定义

集合中的方法

集合中的方法:利用set()创建的集合是可变集合,它的类型是不可哈希(unhashable)的.对于这句话的理解是,set()创建的集合,整体上是可变的,可以增.删:但集合中的元素(个体)是不可变(hashable)的,不能被修改,且集合中的元素不能是列表.字典等可变类型的对象. add()方法:向集合中增加一个元素.如果要增加的元素已存在于集合中,则什么也不做.add()方法必须传入一个明确的不可变的参数,因为集合是无序的,所以元素会被加到集合的任意位置. >>> a = set([1