Tag: 数据结构

如何获取LinkedList 中的第n个元素?

如何获取LinkedList实例的第n个元素? 是否有内置方式或我可能需要介绍我自己的实现? 例如扩展方法? 谢谢

深层嵌套字典是反模式吗?

我有一个结构可以使用三深嵌套字典很容易地表示,就像这样 private static Dictionary<string, Dictionary<string, Dictionary>> PrerenderedTemplates; 结构可能会像这样使用 PrerenderedTemplates[instanceID][templategroup][templatepart] 现在,我意识到这段代码很难阅读,因为通过查看定义语句,你无法分辨出它的用途。 我可以在将其更改为Dictionary看到的唯一优势是可读性。 将每个嵌套转换为自己的类(例如, class PrerenderedTemplate{} class TemplateGroup{} class TemplatePart{} )将为很少(如果有)计算优势添加更多代码行。 据我所知。 那么,我的方法是“好的”还是我应该加倍努力并创建单独的课程? 是否可以覆盖嵌套Dictionary在文档/注释中的工作方式 是否有处理这种嵌套的最佳实践? 请记住,这是一个私人成员,对于使用该类的人来说,它不需要直截了当。 更新 所以,受Reza的启发,但无法使用Tuples,我决定创建自己的密钥生成器并实现他的模式: private Dictionary PrerenderedTemplates; private string GetPrerenderedTemplateKey(string InstanceId, string FeatureId, string OptionId) { return new StringBuilder(instanceId) .Append(FormatTools.LIST_ENTRY_DELIMITER) .Append(templategroup) .Append(FormatTools.LIST_ENTRY_DELIMITER) .Append(templatepart).ToString(); } 其中FormatTools.LIST_ENTRY_DELIMITER是Unicode专用字符0xe04d 。

如何比较C#中的两个词典

我有两个Generic Dictionaries.Both有相同的键。但是值可以不同。我想比较第二个字典和第一个字典。如果值之间存在差异,我想将这些值存储在单独的字典中。 1st Dictionary ———— key Value Barcode 1234566666 Price 20.00 2nd Dictionary ————– key Value Barcode 1234566666 Price 40.00 3rd Dictionary ————– key Value Price 40 可以任何人给我一个最好的算法来做这个。我写了一个算法,但它有很多循环。我正在寻求一个简短而有效的想法。也像使用LINQ查询表达式或LINQ lamda表达式的解决方案。我正在使用。带有C#的Net Framework 3.5。 我发现了一些关于Except()方法的东西。但不幸的是我无法理解该方法发生了什么。如果有人解释建议的算法,那就太好了。我总是喜欢学习:)。 谢谢塔博。

通用键/值对集合保留了插入顺序?

我正在寻找像Dictionary 这样的东西,但保证它保留了插入顺序。 由于Dictionary是一个哈希表,我不认为它。 是否有一个通用集合,或者我是否需要使用旧的.NET 1.1集合之一?

C#flattening json结构

我在C#中有一个json对象(表示为Newtonsoft.Json.Linq.JObject对象),我需要将其展平为字典。 让我举例说明我的意思: { “name”: “test”, “father”: { “name”: “test2” “age”: 13, “dog”: { “color”: “brown” } } } 这应该产生一个包含以下键值对的字典: [“name”] == “test”, [“father.name”] == “test2”, [“father.age”] == 13, [“father.dog.color”] == “brown” 我怎样才能做到这一点?

C#优先级队列

我正在寻找一个具有如下界面的优先级队列: class PriorityQueue { public void Enqueue(T item, int priority) { } public T Dequeue() { } } 我见过的所有实现都假设该item是IComparable但我不喜欢这种方法; 我想在将其推入队列时指定优先级。 如果不存在现成的实现,那么自己做这个的最佳方法是什么? 我应该使用什么底层数据结构? 某种自平衡树,还是什么? 标准的C#.net结构会很好。

C数据结构模仿C#的List <List >?

我希望将ac#方法重构为ac函数以试图获得一些速度,然后在c#中调用c dll以允许我的程序使用该function。 目前,c#方法采用整数列表并返回整数列表的列表。 该方法计算了整数的幂集,因此3个int的输入将产生以下输出(在此阶段,int的值不重要,因为它用作内部加权值) 1 2 3 1,2 1,3 2,3 1,2,3 每行代表一个整数列表。 输出指示第一个列表的索引(偏移量为1),而不是值。 因此1,2表示索引0和1处的元素是幂集的元素。 我不熟悉c,那么对于允许c#访问返回数据的数据结构,我最好的选择是什么? 提前致谢 更新 谢谢大家到目前为止的评论。 以下是问题本质的背景知识。 用于计算集合的幂集的迭代方法是相当直接的。 真正有两个循环和一点点操作。 它只是被称为..很多(事实上,如果集合的大小足够大,数十亿次)。 我对使用c(人们已经指出过的c ++)的看法是,它为性能调优提供了更多的空间。 直接端口可能不会提供任何增加,但它为更多涉及的方法开辟了道路,以便从中获得更高的速度。 即使每次迭代的小幅增加也等同于可测量的增长。 我的想法是移植直接版本,然后努力增加它。 然后随着时间的推移重构它(在SO的每个人的帮助下)。 更新2 来自jalf的另一个公平点,我不必使用list或equivelent。 如果有更好的方法,那么我愿意接受建议。 列表的唯一原因是每组结果的大小不同。 到目前为止的代码…… public List<List> powerset(List currentGroupList) { _currentGroupList = currentGroupList; int max; int count; //Count the objects in the group count = _currentGroupList.Count; max […]

C#中的多键词典(另一种)?

基于这个问题 ,是否有一个简单的解决方案,可以使用多键字典,其中任何一个键都可以用来识别值? 即。 MultikeyDictionary foo; foo.Add(key1, key2, value); myValue = foo[key1]; // value == myValue foo.Remove(key2); myValue = foo[key1]; // invalid, Exception or null returned

在C#中使用IEqualityComparer 接口和EqualityComparer 类

我正在编写一个循环链表,使用这篇文章作为帮助。 在一个函数中,在此列表中搜索具有给定值的节点 public Node Find(T item) { Node node = FindNode(head, item); return node; } Node FindNode(Node node, T valueToCompare) { Node result = null; if (comparer.Equals(node.Value, valueToCompare)) result = node; else if (result == null && node.Next != head) result = FindNode(node.Next, valueToCompare); return result; } 作者使用IEqualityComparer comparer对象,该对象在其中一个构造函数中使用属性EqualityComparer.Default进行初始化。 你能解释一下在这里使用这些接口( IEqualityComparer )和类( EqualityComparer )的想法吗? 我读过MSDN,但我不理解工作和使用它们的原理。

c#命令保留数据结构

奇怪的是,MSDN没有关于数据结构的保持属性的信息。 所以我一直在假设: Hashtable和Hashset不保留插入顺序(也就是“散列”中有赠品) 字典和列表DO保留插入顺序。 从这里我推断,如果我有一个定义曲线的Dictionary foo ,foo.Keys.ToList()和foo.Values.ToList()将给我一个有关的曲线范围和域的列表没有弄乱它吗?