LINQ中的特殊嵌套查询

时间:2011-11-30 17:00:25

标签: vb.net linq

我正在写一个图算法,我几乎就在那里......

我的算法将多个边缘对象存储在边集合中,表示从初始顶点到最终顶点的路径。因此,在这些顶点之间也应该有几条路径(几个边缘类型的集合),存储在另一个集合中(在我的类中,调用“collswap”)。

每个边都是一个有两个顶点的对象:initial(v)和final(w),这样:

dim manhattan as new vertex
dim brooklyn as new vertex
dim statenIsland as new vertex

dim brooklynBridge as new edge(brooklyn, manhattan)
dim route278 as new edge(statenIsland, brooklyn)

'calculates the path and stores the collections in a private property 'collswap'
me.returnPath(statenIsland, manhattan)

'in me.collswap (type collection) I have one collection (type 'system.collections.generic.list(of edge)) with two edges (route278 and brooklynBridge)

图表已正确计算,但现在我必须选择最佳路径。所以,我需要以下列方式查询collswap:

  1. 仅检索最后一个边包含vertexW属性中所需顶点的路径 例如:brooklynBridge.vertexW'检索曼哈顿顶点(因为我的代码可以存储一个未到达最终顶点的路径)

  2. 选择各个位置之间的次要路径(较少的元素集合)

  3. 你能帮我建立一个好的(和优雅的)Linq查询来执行这些任务吗?

    谢谢!

1 个答案:

答案 0 :(得分:1)

在C#中,抱歉。我假设collswap有一个名为paths的集合,每个集合都是List edge

  

仅检索最后一条边包含vertexW属性中所需顶点的路径ex:brooklynBridge.vertexW'检索曼哈顿顶点(因为我的代码可以存储未到达最终顶点的路径)

List<List<edge>> goodPaths = collswap.paths.Where(path => path.Last() == manhattan);

这会给那些以manhattan结尾的路径。

  

选择各种位置之间的次要路径(较少的元素集合)

List<edge> shortestGoodPath = goodPaths.OrderBy(path => path.Count()).First();

当良好路径按边数排序时,这给出了第一条好路径;也就是说,这是最短的好路径。

如果需要,您可以将这两种操作结合​​起来:

List<edge> shortestGoodPath = 
    collswap.paths
    .Where(path => path.Last() == manhattan)
    .OrderBy(path => path.Count())
    .First();