1

我使用 VB.net(非常旧的版本)已经有一段时间了,但在过去的 7-8 年里没有。我有 VS 2012 和 .net 4.5,很明显它们添加了令人眼花缭乱的集合数组(不是双关语)。我在网上读了又读,但真的比以前更困惑。

我想要一些关于使用什么类型的集合的建议。

我的 CAD 实体具有: 句柄(最多 16 个字符的十六进制文本字符串) 起点(具有 X、Y 和 Z 坐标的自定义对象)(可选) 终点(具有 X、Y 的自定义对象和 Z 坐标)

出于我的目的,我希望能够检索(和删除)共享某个句柄或某个起点或终点的所有实体:

if handle = 345 OR
if point = start point OR
if point = end point

我预计会有多达几千个实体,并将“链接”它们。我所说的链接的意思是在“链”中端到端组装。我最终会得到一个到多个形成链的实体片段。

我制定了一个逻辑,它只传递一次实体集合并产生一个链式结果。这取决于使用上述标准进行发现。

编辑...极其简化的实际数据可能如下所示:

Handle: 110
Start point x: 23.17
Start point y: 18.29
End point x: 32.5
End point y: 30.72

Handle: 111
Start point x: 40.12
Start point y: 18.32

Handle: 112
Start point x: 40.12
Start point y: 40.12
End point x: 100.1
End point y: 83.2

Handle: 113
Start point x: 40.12
Start point y: 18.32
End point x: 32.5
End point y: 30.72

这些最终将按以下顺序链接:

Handle: 110
Start point x: 23.17
Start point y: 18.29
End point x: 32.5
End point y: 30.72

Handle: 113
Start point x: 40.12
Start point y: 18.32
End point x: 32.5
End point y: 30.72

Handle: 111
Start point x: 40.12
Start point y: 18.32

Handle: 112
Start point x: 40.12
Start point y: 40.12
End point x: 100.1
End point y: 83.2

您会 vb.net 专家推荐什么集合?

4

3 回答 3

2

这实际上取决于您删除实体的频率。如果您只谈论几千个实体并且您不会每秒进行数百次大规模删除,那么一个简单的LinkedList(Of Entity)真的很容易。这给了你你的“链”。

要删除符合您的条件的项目(我的代码是 C#,但您可以很容易地翻译它):

chain = new LinkedList<Entity>();
// some code populates the linked list.

// now, to delete
LinkedListNode<Entity> node = chain.First;
while (node != null)
{
    LinkedListNode<Entity> nextNode = node.Next;
    if (node.Value.handle = searchHandle ||
        node.Value.startPoint.Equals(searchStartPoint) ||
        node.Value.endPoint.Equals(searchEndPoint)
    {
        // remove the node
        chain.Remove(node);
    }
    node = nextNode;
}

您可以使用 来执行此操作List(Of Entity),但删除会慢得多,因为将项目插入链的中间。

于 2013-09-12T00:28:22.313 回答
0

我认为你可以只使用 List(Of T)。

例如:

List(Of MyCADEntry) listEntries = new List( Of MyCADEntry )();

然后将 LINQ 用于类似的事情

listEntries.Where( Function(x) x.StartPoint == point );
于 2013-09-11T23:54:41.657 回答
0

我会使用具有自定义键类型的字典,该类型会覆盖GetHashCode结果取决于您的句柄或点坐标值的位置。我还将添加一个值包装类,它充当链接列表,其中包含对链中下一个元素的引用。

于 2013-09-11T23:42:38.013 回答