我有一個來自Lucene.net的鍵值文檔列表,我希望能夠根據各種值根據用戶輸入對它們進行分組。所以基本上我有以下列表在.net中代表多個級別分組的體系結構
Doc#1 - Weight:10;Size:20;ExpiresIn:90days
Doc#2 - Weight:10;Size:30;ExpiresIn:90days
Doc#3 - Weight:10;Size:20;ExpiresIn:30days
Doc#4 - Weight:10;Size:20;ExpiresIn:30days
,我想用戶告訴我:組此大小則重量,這會產生以下
Size: 20
Weight: 10
Count: 3
Doc#1, Doc#3, Doc#4
Size: 30
Weight: 10
Count: 1
Doc#2
但他也告訴我要組在ExpiresIn:
ExpiresIn: 90Days
Count: 2
Doc#1, Doc#2
ExpiresIn: 30Days
Count: 2
Doc#3, Doc#4
我的問題是不是真正的速度(當然這肯定會存在巨大的數據集的情況下),但結構相當之一。我想知道我可以代表不同的實體,我有:
- 包含文檔的列表中的葉類節點(和它們的計數,平凡)(在第一個例子的葉節點)
- 包含葉片的列表(重量在第一示例)一個恰在上面的葉子節點
- 包含節點的列表(大小在第1例的頂至n-2個節點)
我試過從一個普通的抽象節點開始,它將包含一個通用節點的列表:然而,當我嘗試從頂端注入一個文檔時,這種方法會崩潰,因爲每個節點都不知道它自己的上下文,並沒有知道在他之後應該創造什麼。
Public MustInherit Class Node(Of T)
Implements IEnumerable(Of T)
Private InnerValue As String
Private InnerGrouping As String
Protected InnerData As New List(Of T)
MustOverride Sub AddGroupingElement(element As LuceneSearchResultsInfo)
End Class
Public Class LeafNode
Inherits Node(Of LuceneSearchResultsInfo)
Public Overrides Sub AddGroupingElement(element As LuceneSearchResultsInfo)
InnerData.Add(element)
End Sub
End Class
Public Class CommonNode
Inherits Node(Of CommonNode)
Public Overrides Sub AddGroupingElement(element As LuceneSearchResultsInfo)
Dim InterestedNode = InnerData.FirstOrDefault(Function(n) n.Value = element.Field(Grouping))
If (InterestedNode Is Nothing) Then
InterestedNode = New CommonNode ' argh, i'm stuck, i don't know the rest of the context
End If
End Sub
End Class
我正在考慮存儲一個簡單的字典,以存儲爲關鍵字的文檔的完整路徑。這很簡單,但並不像一個專門的結構那樣愉快。所以,任何想法歡迎:)
讓問題稍微成熟之後,我發現我所問的並不是我用樹表示的東西;然而,如果我們想要在各個層面獲得相同的功能,mikalai會帶來一個很好的解決方案。 – samy