[英]Simplistic way to represent tree-like data?
我有一些 JSON 數據,我想將其與特定的 ID 數組匹配。 因此,例如,JSON temperature: 80, weather: tornado
可以 map 到 ID 數組[15, 1, 82]
。 這個 ID 數組是完全任意的,我將為特定輸入定義自己的內容,它只是為了根據條件提供建議。
因此,雖然tornado
條件下的temperature
>= 80 始終映射到[15, 1, 82]
,但cloudy
條件下的相同溫度可能是[1, 16, 28]
,依此類推。
問題是有很多潛在的“分支”。 我的程序有 7 個一天中的時間,每個time of day
節點都有 7 個潛在的溫度范圍,每個temperature range
節點都有 15 個可能的天氣事件。 因此,手動編寫 735 種組合的if
語句(如果我計算正確的話)會非常不守規矩。
出於演示目的,我在上面繪制了代表一條路徑的“決策樹”。
除了大量嵌套的條件/案例語句之外,還有哪些推薦的方法可以在代碼中表示這一點?
謝謝。
不需要大量分支。 創建一個包含 735 個可能條目的查找表非常容易。 你說你會自己添加這些值。
為一天中的每個時間、溫度范圍和天氣事件創建枚舉。 因此,一天中的時間從 0 映射到 6,溫度范圍從 0 映射到 6,天氣事件從 0 映射到 14。您基本上有一個 3 維數組。 數組中的每個條目都是一個 ID 列表列表。
在 C# 中,它看起來像這樣:
List<List<int>>[][][] = LookupTable[7][7][15];
要填充查找表,請編寫一個生成 JSON 的程序,您可以將其包含在您的程序中。 在偽代碼中:
for (i = 0 to 6) { // loop for time of day
for (i = 0 to 6) { // loop for temperature ranges
for (i = 0 to 14) { // loop for weather events
// here, output JSON for the record
// You'll probably want a comment with each record
// to say which combination it's for.
// The JSON here is basically just the list of
// ID lists that you want to assign.
}
}
}
也許您想使用該程序生成 JSON 骨架(即每個 [time-of-day, temperature, weather-event] 組合一條記錄),然后手動添加 ID 列表列表。
這是一些准備工作,但最后您的查找非常簡單:將一天中的時間、溫度和天氣事件轉換為其對應的 integer 值,並在數組中查找。 只需幾行代碼。
您可以使用 map 或字典做類似的事情。 您將生成 JSON 如上所述,但不是將其加載到三維數組中,而是將其加載到您的字典中,鍵是三個維度的串聯。 例如,一個鍵是:
"early morning,lukewarm,squall"
可能還有其他查找表解決方案。 這是我想到的前兩個。 關鍵是您擁有大量非常適合索引查找的 static 數據。 利用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.