Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中的n维结构/映射_Java_Arrays - Fatal编程技术网

java中的n维结构/映射

java中的n维结构/映射,java,arrays,Java,Arrays,我需要一个java的n维结构(map) 比如说,我们有一家动物商店,我们希望对某些类型的动物保持最低的价格 假设我们的标准是: 类型:猫,狗,任何 年龄:1,2岁,任何年龄 颜色:棕色,红色,任何颜色 性别:男,女,任何人 结果价格应为所有相关配置中的最低价格 例如,最低价格 猫是20岁 1岁是:10岁 棕猫:25 其他:30 因此,棕色、1卵黄、狗、雌性的结果价格是10 对于黑色,2卵黄,猫,雄性,它是20。 等等 这有什么结构吗?如果没有,那么最好的实现方法是什么 只需为每个“维度”

我需要一个java的n维结构(map)

比如说,我们有一家动物商店,我们希望对某些类型的动物保持最低的价格

假设我们的标准是:

  • 类型:猫,狗,任何
  • 年龄:1,2岁,任何年龄
  • 颜色:棕色,红色,任何颜色
  • 性别:男,女,任何人
结果价格应为所有相关配置中的最低价格

例如,最低价格

  • 猫是20岁
  • 1岁是:10岁
  • 棕猫:25
  • 其他:30
因此,棕色、1卵黄、狗、雌性的结果价格是10

对于黑色,2卵黄,猫,雄性,它是20。 等等


这有什么结构吗?如果没有,那么最好的实现方法是什么

只需为每个“维度”使用一个映射和一个不同的类(可能是枚举)

维度成为映射的键(键类型必须是通用的超级类型,所以可能是Object),值类型将是price(从示例中判断为int)


要确定价格,请根据每个维度选择价格,并使用最小值。完成。

只需为每个“维度”使用一个映射和一个不同的类(可能是枚举)

维度成为映射的键(键类型必须是通用的超级类型,所以可能是Object),值类型将是price(从示例中判断为int)


要确定价格,请根据每个维度选择价格,并使用最小值。完成。

我认为您不能仅使用一个映射或一小组映射来完成此操作,因为您希望定义对多个条件组合的限制。我看不到一种确定要使用的适当关键点的方法,因为您不是根据多维空间中的点来定义限制,而是根据各种形状的可能重叠空间来定义限制。您的
ANY
在功能上不是该维度上的一个不同点,而是一个覆盖所有其他定义点的范围,因此您无法对其进行简单的相等比较,这正是映射键所需要的

我会把所有的限制都保存在
列表中
,然后对照你想要找到最低价格的宠物物品进行检查。制作一个
Restriction
类,并给它一个
appliesTo(Pet-Pet)
方法


如果最终得到了大量限制,那么如果在每个条件中引入了“通配符”的概念,则可以使用映射在它们上构建“索引”。然后,您可以将每个标准的每个值(包括适用于宠物的所有条件的“通配符”)映射到可能适用于该标准的所有最低价格条件的列表中。但是,这将是更多的代码,并且可能不会给您带来太多的加速,除非您的大多数限制

我认为您不能仅使用一个映射或一小组映射来实现这一点,因为您希望对多个条件的组合定义限制。我看不到一种确定要使用的适当关键点的方法,因为您不是根据多维空间中的点来定义限制,而是根据各种形状的可能重叠空间来定义限制。您的
ANY
在功能上不是该维度上的一个不同点,而是一个覆盖所有其他定义点的范围,因此您无法对其进行简单的相等比较,这正是映射键所需要的

我会把所有的限制都保存在
列表中
,然后对照你想要找到最低价格的宠物物品进行检查。制作一个
Restriction
类,并给它一个
appliesTo(Pet-Pet)
方法


如果最终得到了大量限制,那么如果在每个条件中引入了“通配符”的概念,则可以使用映射在它们上构建“索引”。然后,您可以将每个标准的每个值(包括适用于宠物的所有条件的“通配符”)映射到可能适用于该标准的所有最低价格条件的列表中。但是,这将是更多的代码,并且可能不会给您带来太多的加速,除非您的大多数限制

在我第一次尝试回答这个问题时,我忽略了可以将价格分配给属性组合的要求。这个答案应该能很好地处理这一部分

对每个属性进行建模,以确保没有两个属性具有相同的值。例如,如果你有眼睛颜色和毛发颜色这两个维度,不要只使用字符串,因为棕色可能属于这两个维度中的任何一个。我假设有一个公共接口的“属性”不存在这样的接口,您可以使用“对象”代替。所有此类类都需要正确实现“equals”

现在创建一个类来为属性组合及其价格建模:(以下是在没有IDE或编译器的情况下编写的。错误将被视为对读者的有意培训)

公共类属性组合{
私有最终集属性;
公共属性组合(设置属性){
this.attributes=属性;
}
公共布尔匹配(设置属性){
对于(a:this.attributes){
如果(!attributes.contains(a))
返回false;
}
返回true;
}
}
现在有一个结合属性和价格的有序类

public class AttributeWithPrice implements Comparable<AttributeWithPrice> {
    private final AttributeCombination attributes;
    private final int price;

    // add the obvious constructor or switch to scala

    public int compareTo(AttributeWithPrice other){
        return this.price - other.price // or the other way round, I can never remember
    }
}
price实现可比较的公共类属性{
私有最终属性组合属性;
私人最终int价格;
//将明显的构造函数或开关添加到scala
公共内部比较(属性与价格其他){
退回这个.price-other.price//或者反过来,我记不得了
}
}

现在,您可以创建一个AttributeWithPrice对象列表,对其进行排序,使小的价格排在第一位,并对其进行迭代,直到找到匹配的元素。

在我第一次尝试回答这个问题时,我错过了
public class AttributeWithPrice implements Comparable<AttributeWithPrice> {
    private final AttributeCombination attributes;
    private final int price;

    // add the obvious constructor or switch to scala

    public int compareTo(AttributeWithPrice other){
        return this.price - other.price // or the other way round, I can never remember
    }
}