【问题标题】:Calling a unique function based on matrix row and col index调用基于矩阵行和列索引的唯一函数
【发布时间】:2011-12-28 08:07:56
【问题描述】:

根据矩阵行和列索引调用唯一函数

共有三个视图

ViewA
ViewB
ViewC

用户可以从ViewX 切换到ViewY。有一种不同的方式可以从 X 和 Y 切换。例如从 A 切换到 B 是通过一种方式,而从 B 切换到 A 将通过另一种方式。

我正在尝试为它编写一个通用函数。据我了解,这三个视图一共有6种组合(A-B、A-C、B-A、B-C、C-A、C-B)

           ViewA    ViewB   ViewC
    ViewA    X         2        3
    ViewB    4         X        6
    ViewC    7         8        X

我在想我会为给定的动作注册特定的功能。例如如果移动是从 ViewA 到 ViewB,那么我会将函数 SwitchViewA_to_viewB() 注册到第二个索引。

如果我们可以有其他更好的方法来实现它,请告诉我。这只是一个三视图的例子。在我的实际情况中,我有将近 10 个这样的视图。

【问题讨论】:

  • 在 perl 中,我会将其作为调度表,但也许您也可以查看 State design pattern
  • stevenl - 在我的例子中使用状态设计模式真的很棒。感谢您探索这个想法!!!

标签: algorithm perl


【解决方案1】:

它被称为调度表。

my %switchers = (
   ViewA => { ViewB => \&SwitchViewA_to_viewB,
              ViewC => \&SwitchViewA_to_viewC, },
   ViewB => { ViewA => \&SwitchViewB_to_viewA,
              ViewC => \&SwitchViewB_to_viewC, },
   ViewC => { ViewA => \&SwitchViewC_to_viewA,
              ViewB => \&SwitchViewC_to_viewB, },
);

$switchers{$from}{$to}->()
   if $from ne $to;

my %switchers = (
   "ViewA-ViewB" => \&SwitchViewA_to_viewB,
   "ViewA-ViewC" => \&SwitchViewA_to_viewC,
   "ViewB-ViewA" => \&SwitchViewB_to_viewA,
   "ViewB-ViewC" => \&SwitchViewB_to_viewC,
   "ViewC-ViewA" => \&SwitchViewC_to_viewA,
   "ViewC-ViewB" => \&SwitchViewC_to_viewB,
);

$switchers{"$from-$to"}->()
   if $from ne $to;

请注意,您可以通过在括号中传递参数来将参数传递给函数(像往常一样)。


如果你有 10 个视图,这意味着你有 90 个函数。

您确定这是解决此问题的方法吗?您或许应该考虑一种不需要了解先前视图的方法。也许每个视图可以有两个功能。调用一个来激活视图,另一个来停用它。

那么你只需要 20 个函数而不是 90 个。添加第十一个视图只需要编写 2 个函数而不是 20 个。

【讨论】:

  • 是的,正如我在帖子中提到的,这就是我正在做的事情。我正在寻找更可行的方法(如果可能的话)。
  • 感谢您的第二次回复。这真的很有帮助。它正在减少函数计数。
【解决方案2】:

在 Java 中,您可以创建“函数”对象,将它们存储在一个集合中(例如地图的映射),为您拥有的组合获取对应的对象并执行。

函数接口,实际函数实现如下:

interface SwitchViewFunction() {
  void switchView(View from, View to);
}

在你看来切换代码:

Map<View,Map<View,SwitchViewFunction>> map = ...;

map.get(from).get(to).switchView(from, to); 

请注意,在上面的代码中没有检查(例如 null 等),这些是留给您的练习。

还要注意,要使用View 作为键,它应该具有hashCode()equals(...) 的合理实现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-17
    • 1970-01-01
    • 2022-08-19
    • 2015-07-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多