vb.net - 编写一个接受一维或二维数组作为输入的函数 - vb.net
问题描述
我正在尝试编写一个接受两种不同类型作为参数的函数。这个例子是一个矩阵乘法函数,我希望它适用于 1D 或 2D 数组,这样我就可以用它来将两个矩阵相乘或将一个矩阵和一个向量相乘。这可能吗?
Private Function MatrixMultiplication(byVal input1 As Type1, byVal input2 as Type2)
If Type1 == Double(,) And Type2 == Double(,) Then
Do Something
ElIf Type1 == Double(,) And Type2 == Double() Then
Do Something
End Function
编辑:有人建议这个问题是那个问题的重复。我拒绝了这个问题作为我的答案,因为范围不同。这个问题是关于在覆盖时不必要地重复代码。这个问题是关于将不同类型的传递参数,特别是一维数组和二维数组,传递给同一个函数。重载是解决这个问题的方法,但问题完全不同。由于我在不知道“过载”这个词的情况下找不到我正在寻找的答案,我相信如果其他人遇到同样的问题,找到这个答案很重要。
解决方案
结果无论我搜索多少,我都找不到答案,因为我不知道“过载”这个词。感谢 Jimi 在评论中提供答案。我重载了这个函数,它可以工作了!这是我的代码,以防有人想知道。再次感谢。
Private Function matrixMultiply(A As Double(,), B As Double(,)) As Double(,)
If A.GetUpperBound(1) = B.GetUpperBound(0) Then
' A(m x n) * B(n x o) = C(m x o)
Dim C(A.GetUpperBound(0), B.GetUpperBound(1)) As Double
' C(i,j) = Sum(k=1 to n)(A(i,k)*B(k,j))
For i As Integer = 0 To A.GetUpperBound(0)
For j As Integer = 0 To B.GetUpperBound(1)
For k As Integer = 0 To A.GetUpperBound(1)
C(i, j) += A(i, k) * B(k, j)
Next
Next
Next
Return C
Else
Throw New ArgumentException(String.Format("Array dimensions do not match for multiplication"))
End If
End Function
' overloaded
Private Function matrixMultiply(A As Double(,), B As Double()) As Double()
If A.GetUpperBound(1) = B.GetUpperBound(0) Then
Dim C(A.GetUpperBound(0)) As Double
For i As Integer = 0 To A.GetUpperBound(0)
For j = 0 To A.GetUpperBound(1)
C(i) += A(i, j) * B(j)
Next
Next
Return C
Else
Throw New ArgumentException(String.Format("Array dimensions do not match for multiplication"))
End If
推荐阅读
- go - 从 Go 中的字符串中提取匹配模式
- java - 如何使用hibernate引用表中的现有数据
- guice - 如何将非 Guice 实例注入 Guice 模块
- javascript - 防止 HTML 文件输入在使用 Android 的本机文件选择器时选择 Google Drive 中的文件
- angular - Angular 7/8,1 个依赖项正在干扰另一个依赖项,如何避免在使用它的模块内部加载深度依赖项?或嵌入
- haskell - stack new 命令无法下载 lts-14.1 的构建计划
- list - 从列表中获取偶数位置的元素
- php - 改变数组顺序的数组的递归差分
- scala - 将键值对的 RDD 保存到 CSV 文件
- r - R不承认一个因素的水平是相同的。有没有办法做到这一点?