- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个维护对象列表的“管理器”类。每个对象都有一定的“位置”,但这对他们来说是不知道的,只有经理知道这一点。管理器必须为每个对象分配一个位置,并维护其根据此“外部属性”排序的对象列表。
请注意,对象的位置可以随时更改。理想情况下,我应该能够在任何时候立即获得位置 X 的元素或元素 X 的位置。
这是 C# 代码。我想知道这样做的一种干净或惯用的方式是什么。
我想过做一个这样的内部类:
class SortedElement {
public Element Elem { get; set; }
public int Position { get; set; }
}
然后维护一个 SortedElements 列表。我不知道,这对我来说似乎很笨拙。例如,两个 SortedElements 可能具有相同的 Position。我觉得我缺少一个明显的、干净的解决方案。我也可以使 Position 成为元素本身的一个属性,但这在语义上没有意义,这意味着除了让我的生活更轻松之外,他们没有理由知道这一点。
请让我去捂脸。
编辑:按照 Eric Lippert 列出我的要求和睡个好觉的建议,我意识到我应该选择 LinkedList<Element>
并使用索引作为位置。事实上,这里最常见的操作是在容器的开头插入和从容器内的任何地方移除,这在基于数组的容器上是昂贵的。感谢所有回复。
最佳答案
让我们列出您的要求。我假设您想要一个具有以下操作的数据结构 S:
这是您想要的操作的正确摘要吗? (请注意,将元素移动到新位置与 RemoveElementAt 后跟 InsertElementAt 相同。)
如果这些不是对操作的正确总结,那么如果您准确列出您希望抽象数据类型支持的操作集将会很有帮助。
一旦我们有了明确的操作要求列表,那么下一个问题就是“渐近性能要求是什么?”
例如,您可以使用 List<T>
作为你的数据结构 S;它支持所有这些操作。但是,如果列表很长,则在列表开头插入和删除的开销非常大,“包含”操作也是如此。
您可以使用更多奇特的数据结构,它们在建模插入和删除方面非常高效;我们使用这样的数据结构来模拟 C# IDE 中编辑器状态的变化。显然,每个标记、变量声明等都是一个具有“位置”的“元素”,并且当您在其周围键入时,该位置一直在变化;以有效的方式处理这些更改非常具有挑战性,但如果那是您所处的问题空间,那么请更清楚地描述它,我们可以为您提供有关数据结构的指导,您可以对其进行一些研究。
关于c# - 保持元素的排序列表,按该元素外部的属性排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2046674/
你能比较一下属性吗 我想禁用文本框“txtName”。有两种方式 使用javascript,txtName.disabled = true 使用 ASP.NET, 哪种方法更好,为什么? 最佳答案 我
Count 属性 返回一个集合或 Dictionary 对象包含的项目数。只读。 object.Count object 可以是“应用于”列表中列出的任何集合或对
CompareMode 属性 设置并返回在 Dictionary 对象中比较字符串关键字的比较模式。 object.CompareMode[ = compare] 参数
Column 属性 只读属性,返回 TextStream 文件中当前字符位置的列号。 object.Column object 通常是 TextStream 对象的名称。
AvailableSpace 属性 返回指定的驱动器或网络共享对于用户的可用空间大小。 object.AvailableSpace object 应为 Drive 
Attributes 属性 设置或返回文件或文件夹的属性。可读写或只读(与属性有关)。 object.Attributes [= newattributes] 参数 object
AtEndOfStream 属性 如果文件指针位于 TextStream 文件末,则返回 True;否则如果不为只读则返回 False。 object.A
AtEndOfLine 属性 TextStream 文件中,如果文件指针指向行末标记,就返回 True;否则如果不是只读则返回 False。 object.AtEn
RootFolder 属性 返回一个 Folder 对象,表示指定驱动器的根文件夹。只读。 object.RootFolder object 应为 Dr
Path 属性 返回指定文件、文件夹或驱动器的路径。 object.Path object 应为 File、Folder 或 Drive 对象的名称。 说明 对于驱动器,路径不包含根目录。
ParentFolder 属性 返回指定文件或文件夹的父文件夹。只读。 object.ParentFolder object 应为 File 或 Folder 对象的名称。 说明 以下代码
Name 属性 设置或返回指定的文件或文件夹的名称。可读写。 object.Name [= newname] 参数 object 必选项。应为 File 或&
Line 属性 只读属性,返回 TextStream 文件中的当前行号。 object.Line object 通常是 TextStream 对象的名称。 说明 文件刚
Key 属性 在 Dictionary 对象中设置 key。 object.Key(key) = newkey 参数 object 必选项。通常是 Dictionary 
Item 属性 设置或返回 Dictionary 对象中指定的 key 对应的 item,或返回集合中基于指定的 key 的&
IsRootFolder 属性 如果指定的文件夹是根文件夹,返回 True;否则返回 False。 object.IsRootFolder object 应为&n
IsReady 属性 如果指定的驱动器就绪,返回 True;否则返回 False。 object.IsReady object 应为 Drive&nbs
FreeSpace 属性 返回指定的驱动器或网络共享对于用户的可用空间大小。只读。 object.FreeSpace object 应为 Drive 对象的名称。
FileSystem 属性 返回指定的驱动器使用的文件系统的类型。 object.FileSystem object 应为 Drive 对象的名称。 说明 可
Files 属性 返回由指定文件夹中所有 File 对象(包括隐藏文件和系统文件)组成的 Files 集合。 object.Files object&n
我是一名优秀的程序员,十分优秀!