【发布时间】:2019-05-28 23:18:32
【问题描述】:
假设我有一个帮助类,其中包含操作集合的方法:
public static void RemainingDegreeDistribution(IGraph graph, float[,] distArr)
{
int total = 0;
for(int i=0; i < graph.Edges.Count; i++)
{
int startRemDeg = graph.Edges[i].Start.RemDeg;
int endRemDeg = graph.Edges[i].End.RemDeg;
distArr[startRemDeg,endRemDeg]++;
distArr[endRemDeg, startRemDeg]++;
total = total+2;
}
for(int i=0; i < distArr.GetLength(0); i++)
{
for(int j=0; j < distArr.GetLength(1); j++)
{
distArr[i,j] /= total;
}
}
}
如何更改代码以允许传入的集合为数组或我自己的集合类之一?
麻烦的是,传入的集合必须是二维的。没有一个接口可以在我自己的集合类中实现,数组也实现了。
我希望能够在这两种情况下重用代码,并避免引入大量难看的条件逻辑。我还需要避免分配内存,因此为数组制作某种包装类是不可接受的。我还想避免在列表中使用列表,因为它使用普通的二维数组更简单,并且列表为我的目的分配了太多的内存。使用索引器或其他东西似乎应该可以做到这一点。有没有办法声明“distArr”必须是任何类型,索引器需要两个参数等?
【问题讨论】:
-
KeyValuePair
-
抱歉,我不太明白这有什么关系。
标签: c# arrays collections interface polymorphism