必须链接某些条件时最有效的过滤方法?

Most efficient way to filter when some conditions must be linked?

我有这个任务,我想根据人们可以回答的可选问题向他们展示某些内容。这是一个类似的简化示例:

人们可以从三类中进行选择:情绪、身高、肤色。他们每个人的选择数量有限。你只能是一种心情和高度,但你可以是多种颜色。所以,A 可能会选择快乐、高大、蓝色。 B 可能是悲伤的、矮小的、绿色的、黄色的和紫色的。 C 可能会感到沮丧和橙色。

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

我正在使用 HTML、CSS 和 JavaScript/jQuery 执行此操作。我一直在考虑为每个类别使用不同的数据类型。然后我在想我应该有一个不同的数据类型来表示情绪、身高和每种不同的颜色(用是或否来填充)。后来看了网上的一些过滤插件,觉得用类就可以了。但是当某些 类 必须链接时,这些都会带来问题。

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

我知道我可能可以编写一些嵌套循环来完成此操作。我也一直在考虑在某些 类 输入后用连字符连接起来并进行过滤。 (例如,从上面看:如果有人回答他们是悲伤和绿色的,在他们输入为悲伤绿色后将它们连接起来,然后将特定内容标记为悲伤绿色)。那样的话,我可以拥有有限数量的 类(可以组合),而不必疯狂地制造大量不同的 类。

我不确定哪个最好,或者我是否(可能)缺少一些明显、优雅的方法来完成此任务。任何建议,将不胜感激;非常感谢!

最重要的是,这听起来像 chain of responsibilities design, with regards to letting the case you have go through each rule until it is caught by the first one that applies. Of course, in your case it sounds more like a tree of responsibility,但在其中可以使用 switch-cases 或类似的东西来完成。以您的示例为例,使用 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...
}