簡體   English   中英

Java中的n維結構/地圖

[英]n-dimensional structure / map in java

我需要Java中的n維結構(地圖)

假設我們有一家動物商店,並且希望對某些類型的動物保持最低價格。

假設我們的標准是:

  • 類型:貓,狗,任何。
  • 年齡:1,2,ANY。
  • 顏色:棕色,紅色,任意色。
  • 性別:男,女,任何。

結果價格應為所有相關配置中的最低價。

例如分鍾 價格

  • 貓是20
  • 1歲是:10,
  • 棕貓:25,
  • 其他:30;

因此,棕色,1歲,狗,雌性的結果價格是10。

黑色,2歲,貓,男性為2​​0,依此類推。

是否有任何結構? 如果沒有,那么實現它的最佳方法是什么。

在我第一次回答這個問題時,我錯過了可以將價格分配給屬性組合的要求。 這個答案應該很好地處理了這一部分。

以某種方式對每個屬性建模,以使兩個屬性都不具有相同的值。 因此,例如,如果您具有眼睛顏色和皮毛顏色的尺寸,則不要僅使用“字符串”,因為棕色可能屬於它們之一。 我假設沒有這樣的接口,但有一個通用接口“屬性”,您可以改用“對象”。 所有這些類都需要正確實現“等於”

現在創建一個類來對屬性及其價格組合進行建模:(以下內容是在沒有IDE或編譯器的情況下編寫的。錯誤應視為對讀者的有意訓練)

public class AttributeCombination{
    private final Set<Attribute> attributes;

    public AttributeCombination(Set<Attribute> attributes){
        this.attributes = attributes;
    }

    public boolean matches(Set<Attribute> attributes){
        for(a : this.attributes){
            if (!attributes.contains(a))
                return false;
        }
        return 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
    }
}

現在,您可以創建AttributeWithPrice對象的列表,對它進行排序,這樣小價格首先出現,然后遍歷它,直到找到匹配的元素。

只需為每個“維度”使用一個Map和一個不同的類(可能是枚舉)。

尺寸成為地圖的鍵(鍵類型必須是通用的超類型,因此可能是對象),而值類型將是價格(根據示例判斷)。

要確定價格,您可以根據每個維度選擇價格並使用最小值。 完成。

我認為您不能為此使用一個地圖或一小套地圖,因為您想定義多個條件組合的限制。 我沒有確定使用適當鍵的方法,因為您不是在多維空間中的點方面定義限制,而是在各種形狀的可能重疊的空間方面定義限制。 從功能ANY並不是該維度上的唯一點,而是覆蓋所有其他定義點的范圍,因此您無法對其進行簡單的相等比較,這就是Map鍵所需要的。

我只是將所有限制都保留在一個List並對照您要查找最低價格的寵物物品檢查所有這些限制。 制作一個Restriction類,並給它一個appliesTo(Pet pet)方法。

如果最終遇到了一大堆限制,則可以在每個條件中引入“通配符”的概念時,使用Google Maps在其上建立“索引”。 然后,您可以將每個條件的每個值(包括可能適用於具有該條件的任何值的寵物的所有條件的“通配符”)映射到可能適用於該條件的所有最低價格條件的列表。 但是,這將需要更多代碼,除非您有大部分限制,否則可能不會給您太多加速

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM