Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何使用列表中的名称创建跨产品对象?_.net_Vb.net_List_Datatable_Cartesian Product - Fatal编程技术网

.net 如何使用列表中的名称创建跨产品对象?

.net 如何使用列表中的名称创建跨产品对象?,.net,vb.net,list,datatable,cartesian-product,.net,Vb.net,List,Datatable,Cartesian Product,我有一些n个数据列的列表的内存表示 Dim l As New List(Of KeyValuePair(Of String, List(Of Double))) 比如说 Column 1: {1, 2, 3, 4, 5} Column 2: {-0.05, 0, 450.7} etc. 我需要交叉连接,取整个列表的笛卡尔积,或者你喜欢的任何术语,保留名称,并将结果存储到一个对象中。结果看起来像 Col 1 Col 2 1 -0.05 1 0 1

我有一些n个数据列的列表的内存表示

Dim l As New List(Of KeyValuePair(Of String, List(Of Double)))
比如说

Column 1: {1, 2, 3, 4, 5}
Column 2: {-0.05, 0, 450.7}
etc.
我需要交叉连接,取整个列表的笛卡尔积,或者你喜欢的任何术语,保留名称,并将结果存储到一个对象中。结果看起来像

 Col 1   Col 2
 1       -0.05
 1        0
 1        450.7
 2       -0.05
 2        0
 2        450.7
 3       -0.05
(etc.)
如何做到这一点

更新:

下面的答案在C#中有效。为了子孙后代,这里有一个VB.Net等价物(作者的功劳)

您可以使用LINQ

Dim c1 = New List(Of Integer) From {1, 2, 3, 4, 5}
Dim c2 = New List(Of Double) From {-0.05, 0, 450.7}
Dim product = From first In c1 From second In c2 Select New With {first, second}

For Each x In product
    Console.WriteLine(x)
Next
Console.ReadKey()
如果需要得到两列以上的笛卡尔积,下面是Eric Lippert关于这个主题的一篇文章(C#):

我使用的是,和。

您可以使用LINQ

Dim c1 = New List(Of Integer) From {1, 2, 3, 4, 5}
Dim c2 = New List(Of Double) From {-0.05, 0, 450.7}
Dim product = From first In c1 From second In c2 Select New With {first, second}

For Each x In product
    Console.WriteLine(x)
Next
Console.ReadKey()
如果需要得到两列以上的笛卡尔积,下面是Eric Lippert关于这个主题的一篇文章(C#):


我使用的是,和。

您确定不应该使用,而不是键/值对列表吗?将其重写为字典很容易,但我不确定字典如何更容易获得值的叉积。也许这一部分并不容易,但更好的是tgat字典提供了基于散列的查找(注意:不允许重复),这使得在已知密钥的情况下访问项目更快。例如,如果您要为名称
第1列
获取项目,您只需要一行:
myDictionary(“第1列”)
,而对于您的列表,您必须迭代它,直到找到名称。尽管这完全取决于您和您的需要。我只是觉得用列表复制字典的行为有点奇怪。虽然列表提供了基于索引的查找,但在您的案例中可能需要这种查找。-我知道什么?祝你的项目好运!:)是的,我用了一些方法,包括使用索引,只是用那个部分作为一个直观的例子来描述我的主要目标的先决条件。我看得出你的评论对不熟悉Dictionary对象的人会有什么帮助。你确定不应该使用键/值对列表而不是键/值对列表吗?将其重写为Dictionary很容易,但我不确定字典如何更容易获得值的叉积。也许这一部分并不容易,但更好的是tgat字典提供了基于哈希的查找(注意:不允许重复),这使得在已知密钥的情况下访问项目更快。例如,如果您要为名称
第1列
获取项目,您只需要一行:
myDictionary(“第1列”)
,而对于您的列表,您必须迭代它,直到找到名称。尽管这完全取决于您和您的需要。我只是觉得用列表复制字典的行为有点奇怪。虽然列表提供了基于索引的查找,但在您的案例中可能需要这种查找。-我知道什么?祝你的项目好运!:)是的,我用了一些方法,包括使用索引,只是用那个部分作为一个直观的例子来描述我的主要目标的先决条件。我知道你的评论对那些不熟悉字典对象的人会有什么帮助。谢谢你的链接。是的,我需要一个像他提到的那样的解决方案,其中列的数量在编译时是未知的。而且,这个解决方案实际上与我尝试的并不遥远,但是语法让我迷路了。感谢链接。是的,我需要一个像他提到的那样的解决方案,其中列的数量在编译时是未知的。而且,这个解决方案实际上离我尝试的并不远,但语法却让我无法理解。