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