【问题标题】:Invalid cast exception error when implementing Power set function实现 Power set 功能时出现无效的强制转换异常错误
【发布时间】:2014-05-02 03:08:58
【问题描述】:

我正在尝试生成图中节点元素列表的幂集。我已经从上一篇文章 (Unique Combination of Set) 中识别并修改了以下代码

Public Function PowerSet(ByVal s As List(Of Node)) As List(Of List(Of Node))

    Dim ini As List(Of List(Of Node)) = New List(Of List(Of Node))
    Return s.Aggregate(ini, Function(a, b) a.Concat(a.Select(Function(x) x.Concat({b}))))

End Function

我正在使用

测试该功能
For Each x In G.PowerSet(G.internal_nodes_in_path)
    Console.WriteLine(x)
Next

但是,我得到一个指向 PowerSet 函数中函数(a,b)的无效转换异常错误:

附加信息:无法转换类型为 'WhereSelectListIterator2[System.Collections.Generic.List1[cDAG_with_classes.Node],System.Collections.Generic.IEnumerable1[cDAG_with_classes.Node]]' to type 'System.Collections.Generic.IEnumerable1[System.Collections.Generic.List`1[cDAG_with_classes.Node] 的对象]'。

任何人都可以就我可能出错的地方提供一些建议吗?

谢谢

【问题讨论】:

    标签: .net vb.net algorithm graph-theory powerset


    【解决方案1】:

    所以我得到了这个风滚草徽章。不知道这是好事还是坏事?!无论如何,我回到了基础,拿出了我的书并提出了一个更好的解决方案(更重要的是一个有效的解决方案)。对于任何在未来翻滚(-杂草)的人......

    Public Function PowerSet(Of T)(ByVal s As IEnumerable(Of T)) As IEnumerable(Of IEnumerable(Of T))
        s = P.nodes_in_path
        Dim result = From m In Enumerable.Range(0, 1 << s.Count)
                Select
                   From i In Enumerable.Range(0, s.Count)
                   Where (m And (1 << i)) <> 0
                       Select s(i)
        Return result
    
    End Function
    

    【讨论】:

      猜你喜欢
      • 2011-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-25
      • 2017-04-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多