可能重复:
为什么Dictionary优先于C#中的哈希表?
Dictionary和Hashtable有什么区别.如何决定使用哪一个?
给出一个清单:
private List<KeyValuePair<string, string>> KV_List = new List<KeyValuePair<string, string>>();
void initList()
{
KV_List.Add(new KeyValuePair<string, string>("qwer", "asdf"));
KV_List.Add(new KeyValuePair<string, string>("qwer", "ghjk"));
KV_List.Add(new KeyValuePair<string, string>("zxcv", "asdf"));
KV_List.Add(new KeyValuePair<string, string>("hjkl", "uiop"));
}
Run Code Online (Sandbox Code Playgroud)
(注意:"qwer"键有多个值,值"asdf"有多个键.)
1)有没有更好的方法来返回所有键的列表,而不仅仅是在KeyValuePair列表上执行foreach?
2)同样,有没有比使用foreach更好的方法返回给定键的所有值列表?
3)然后,如何返回给定值的键列表?
谢谢...
我有一个约9000个产品的列表,其中一些可能有重复.
我想用产品序列号作为密钥来制作这些产品的HashTable,这样我就可以轻松找到重复的产品.
如何在C#/ .NET中使用HashTable?HashSet会更合适吗?
最终我想要一个像这样的列表:
Key-Serial:11110 - 包含:Product1
Key-Serial:11111 - 包含:Product3,Product6,Product7
Key-Serial:11112 - 包含:Product4
Key-Serial:11113 - 包含:Product8,产品9
所以,我有一个所有产品的列表,它们按照具有重复序列号的产品进行分组.这样做的"正确"方法是什么?
我想使用类似的泛型集合Dictionary,但Dictionary要求每个键都是唯一的.我有相同"密钥"的多个值,所以我需要一个允许的通用集合.
我意识到这使得钥匙不再是钥匙,但我不知道还有什么可以称之为钥匙.
是否有C#数据结构将键映射到多个值?我有一个项目集合,我想按名称键入; 但是,名称并不是唯一的.Hashtable和Dictionary只允许使用唯一键.查找似乎接近我想要的; 但是,它不是可变的.
是否存在我缺少的内置数据结构,或者我是否需要自己构建一个?
所以我循环遍历一些对象并初始化Dictionary>对象.
首先,我检查密钥是否存在,如果存在,我将添加到列表中
如果没有,我将创建一个新密钥和新列表
这是正确的逻辑吗?
我将不得不这样做:
new List<int>();
Run Code Online (Sandbox Code Playgroud)
我第一次插入项目了吗?
即:
if(myDic.ContainsKey(car.ID))
{
myDic[car.ID].Add(car.MfgID);
}
else
{
myDic.Add(car.ID, new List<int>);
myDic[car.ID].Add(car.MfgID);
}
Run Code Online (Sandbox Code Playgroud) 我有2个数据结构:Dictionary<string, string>和Multimap<string, string>.Multimap实际上只是一个字典.我从这个问题中得到了必须的代码.这是类定义:
public class Multimap<TKey, TValue> : Dictionary<TKey, HashSet<TValue>>
{ ... }
Run Code Online (Sandbox Code Playgroud)
两种数据结构都有一种.Add(TKey key, TValue value)方法.
我有一个类负责从某些文件填充这些映射.我目前有以下两种方法:
public Dictionary<string, string> PopulateDictionary(...)
{
Dictionary<string, string> returnDictionary = new Dictionary<string, string>();
...
foreach (...)
{
...
returnDictionary.Add(key, value);
}
return returnDictionary;
}
public Multimap<string, string> PopulateMultimap(...)
{
Multimap<string, string> returnMultimap = new Multimap<string, string>();
...
foreach (...)
{
...
returnMultimap.Add(key, value);
}
return returnMultimap;
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,它们完全相同,都长约25行,唯一的区别是它们的返回类型.我想要做的是将其浓缩为一种方法.我的第一次尝试是采用这种方法
public Dictionary<string, object> PopulateGenericDictionary(...)
{ ... } …Run Code Online (Sandbox Code Playgroud) 在C++我正在使用map<string, map<string, string>> Any_name;.在C#中,这相当于什么?
将关键对象的映射存储到值对象集合的最佳方法是什么?
我可以用
Dictionary<KeyType, Collection<ValueType>>
Run Code Online (Sandbox Code Playgroud)
但这种方法往往涉及大量的内务管理,并使代码混乱.
Lookup类型几乎是我正在寻找的结果,但它是不可变的,没有构造函数.我可以创建自己的自定义类,但它似乎应该存在于某个框架中.
c# ×8
dictionary ×3
.net ×2
collections ×2
c++ ×1
casting ×1
generics ×1
hashset ×1
hashtable ×1
keyvaluepair ×1
list ×1
types ×1