Tag: 数据结构

从C#流中读取无符号的24位整数

使用BinaryReader从C#流读取无符号24位整数的最佳方法是什么? 到目前为止,我使用了这样的东西: private long ReadUInt24(this BinaryReader reader) { try { return Math.Abs((reader.ReadByte() & 0xFF) * 256 * 256 + (reader.ReadByte() & 0xFF) * 256 + (reader.ReadByte() & 0xFF)); } catch { return 0; } } 有没有更好的方法来做到这一点?

实现“部分日期”对象

我们需要一个“ 部分日期 ”对象,它允许您指定日期,例如 new PartialDate(1, null, null); // first of the month new PartialDate(1, 2, null); // first of the February new PartialDate(null, 2, null); // February 用例与事件有关。 例如,您可能每年1月都有一个课程,在这种情况下,您不希望或不需要指定日期对象的年份组件。 我们需要能够根据一些任意规则对这些日期进行排序,因此我想实现一种数据类型(它将实现IComparable ,但这不在我的问题范围内)。 我有一些问题: 这是一个坏主意吗? 我在.NET工作,是否有部分框架(或第三方库)将提供此function?

最佳查找数据结构,仅存储密钥(无值的字典)

.Net中具有高性能查找的最佳数据结构是什么,如二叉树实现,但只存储密钥(字符串键)? 我们只需要检查集合中是否存在某个键。 喜欢: Dictonary myKeys; myKeys.Add(“key1”, null); myKeys.Add(“key2”, null); // Dozens or hundreds keys Assert.IsTrue(myKeys.Contains(“key1”));

将一个3D数组的体积展平为一维对象数组

给我一个类型的3D地图,其长度和宽度是均匀的但深度是锯齿状的: public class Map { T[,][] map; … } 返回由2D区域定义的体积内存在的所有类型对象的1D数组以及该区域内所有深度的最佳方法是什么。 例如,我可能有一个数组符号覆盖,如下所示: public IEnumerable this[Rectangle area] { get {…} } 要不就 public IEnumerable this[int x, int y, int width, int length] { get {…} } 老实说,我希望有一个快速的LINQ解决方案,但性能优于解决方案的视觉优雅。 返回的展平数组中对象的顺序并不重要。 如果有人对此有任何建议或经验,请分享您的智慧。 或者,如果有我可以使用的另一个数据结构可以执行我不知道的相同function,我很乐意使用它。 如果我的问题不清楚,请询问更多细节。

在.NET C#中设置操作

我正在研究与roughset相关的东西。 该项目使用了很多集合操作和操作。 我一直在使用字符串操作作为设置操作的停止间隔测量。 它一直工作正常,直到我们需要通过算法处理一些不合理数量的数据(500,000条记录,每条记录大约40多列)。 我知道.net 2.0中没有设置数据结构(2.0是我启动项目时的最新版本)我想知道是否有任何库在.net c#中提供快速设置操作,或者3.5是否添加了本机设置数据结构体。 谢谢 。

填充数组以避免索引超出数组错误范围的方法

当我查询它时,我希望在我的列表中至少有183个项目,但有时候我的提取结果导致项目数低于183.我的当前修复假定在计数小于183的情况下填充数组。 if (extractArray.Count() < 183) { int arraysize= extractArray.Count(); var tempArr = new String[183 – arraysize]; List itemsList = extractArray.ToList(); itemsList.AddRange(tempArr); var values = itemsList.ToArray(); //– Process the new array that is now at least 183 in length } 但似乎我的解决方案不是最好的。 我将不胜感激任何其他解决方案可以帮助确保每当提取物发生时我至少得到183个项目。

List 中使用哪种算法来动态分配内存?

现在我有一个动态分配数组内存的算法: 如果数组已满,我创建一个两倍大小的新数组,并复制项目。 如果数组是四分之一满,我创建一个大小一半的新数组,并复制项目。 这是用于动态内存分配的相当快的算法,尽管将元素复制到新分配的数组的额外开销。 什么是更快, List或基于数组的这种算法? 你会建议使用什么? List使用简单数组作为内部数据结构吗?

如何从C#中的LinkedList中删除与给定条件匹配的元素?

我有一个LinkedList,其中Entry有一个名为id的成员。 我想从id匹配搜索值的列表中删除Entry。 最好的方法是什么? 我不想使用Remove(),因为Entry.Equals会比较其他成员,我只想匹配id。 我希望做一些像这样的事情: entries.RemoveWhereTrue(e => e.id == searchId); 编辑:有人可以为我重新打开这个问题吗? 这不是重复 – 它应该是重复的问题是关于List类。 List.RemoveAll不起作用 – 这是List类的一部分。

从堆列中获取数组而不分配堆

我有一个列表,我想将其数组分配给一个属性。 public void BuildMesh(List list){ mesh.vertices=list.ToArray(); } 现在的问题: 该项目是游戏,并且在垃圾收集方面非常困难,因此ToArray()的默认实现不是一个选项,因为它在列表的内部数组旁边创建了一个新数组。 网格对象来自闭源API,顶点属性是Vector3 [],因此无法为其指定指针。 我有任何阻止堆分配的选项吗? 编辑:这不是重复 不能使用IList 。 网格来自一个封闭的源API,需要Vector3 [],所以我不能为它分配IList 。

C#中的快速订单统计树或哪种DS更有效,SortedList提供相同的function?

我需要在C#代码中使用快速订单统计树 。 我知道唯一具有IndexOf ()方法并保持项目排序的数据结构是SortedList 。 不幸的是,它的插入复杂度是O(n),而不像SortedDictionary那样是O(Lg n)但是SortedDictionary没有IndexOf()。 我需要的方法只是Add ()和IndexOf () 谢谢