2015-07-21 58 views
0

我有这个任务,我想根据他们可以回答的可选问题向人们展示某些内容。以下是一个类似的简化示例:当某些条件必须链接时,最有效的过滤方法?

人们可以选择三种类别:心情,身高,肤色。他们每个人的选项数量有限。你只能是一种心情和高度,但你可以是多种颜色。所以,A人可能会选择开心,高挑,蓝色。 B人可能会伤心,短暂,绿色,黄色和紫色。 C人可能会感到沮丧和橙色。

根据他们的选择,他们会显示一些图片。但一些图像仅依赖于某些组合。例如,一个图像显示给所有高个子的人。另一种是为那些快乐或伤心的人蓝色。另一幅图像只显示给悲伤和绿色的人(只)快乐和紫色(仅)。

我正在用HTML,CSS和JavaScript/jQuery来做这件事。我一直在考虑为每个类别使用不同的数据类型。然后,我想我应该有一个不同的数据类型的心情,身高和每种不同的颜色(这将填补是或否)。然后,在网上查看一些过滤插件,我想也许我会用类来做。但是这些都会造成某些类别必须链接的问题。

图像只是一个例子;实际上有相当多的内容需要显示,所以我试图找到最轻的解决方案。

我知道我可以写一些嵌套循环来完成这个。我也一直在考虑在输入和过滤之后用连字符连接某些类。 (例如,从上面:如果有人回答他们是伤心和绿色的,在他们进入悲伤绿色之后连接他们,然后用悲伤绿色标记具体内容)。这样,我就可以拥有数量有限的课程(可以合并),而无需制作疯狂的不同课程。

我不确定哪个是最好的,或者如果我(可能)缺少一些明显的,优雅的方式来实现这一点。任何建议,将不胜感激;非常感谢!

回答

0

在顶部,这听起来像是一个chain of responsibilities设计,关于让你通过每个规则的情况下,直到它被第一个适用。当然,在你的情况下,它听起来更像是一个tree of responsibility,但它可以使用开关盒或类似的东西来完成。以你的例子为例,使用c#语法:

public class Person 
{ 
    public string Height; 
    public string Mood; 
    public List<string> Colour; 
} 

public void Decide(Person someone) 
{ 
    switch (someone.Height) 
    { 
     case "tall": 
      DecideOnColour(someone); 
      break; 

     case "short": 
      DecideOnMood(someone); 
      break; 
    } 
} 

public void DecideOnColour(Person someone) 
{ 
    foreach (string colour in someone.Colour) 
    { 
     switch (someone.Colour) 
     { 
      //Do something... 
     } 
    } 

    if (someone.Colour.Contains("Green")) 
     // Do something else... 
} 
+0

这太好了,非常感谢!我在编程方面自学,所以你给的链接也非常有帮助。当我不知道适当的术语时,很难使用Google进行学习。我正在读这些东西。开关的使用进入了我的想法,但我还没有想到它。再次感谢! –

相关问题