Ben grails içinde özyinelemeli alanı sınıfı tanımlanmıştır:Yinelemeli kapatma kullanarak bir listeden bir ağaç hiyerarşisini nasıl oluşturabilirim?
class Work {
String code
String title
String description
static hasMany = [subWorks:Work]
static mappedBy = [subWorks: 'parentWork']
Work getRootWork(){
if(parentWork) return parentWork.getRootWork()
else return this
}
boolean isLeafWork(){
return subWorks.isEmpty()
}
boolean isRootWork(){
return !parentWork
}
Ben İşlerin bir listesi var, ancak hiyerarşi yapı henüz inşa edilmez. Benim ihtiyacım kodu ima dayanarak bu eserler arasında hiyerarşik bir ilişki inşa etmektir
def works = [new Work(code:'A', title:'TitleA'),
new Work(code:'B', title:'TitleB'),
new Work(code:'A.1', title:'Titile A.1'),
new Work(code:'B.1', title:'Title B.1'),
new Work(code:'B.2', title:'Title B.2'),
new Work(code:'B.3', title:'Title B.3'),
new Work(code:'B.2.2', title:'Title B.2.2'),
new Work(code:'B.2.3', title:'Title B.2.3'),
new Work(code:'A.1.1', title:'Title A.1.1'),
new Work(code:'A.1.2', title:'Title A.1.2'),]
: gibi yapı görünüyor. Örneğin. A.1 A'nın ilk çocuk çalışmasıdır; B.1.1, ebeveyn B çalışması olan B.1 çalışmasının ilk çocuğudur. Groovy'nin, bu tür hiyerarşik yapıyı inşa etmek için tekrar eden kapanışları desteklediğini biliyorum. Groovy resmi belgelerinde, JN2515 Fibonacci sayı örneği gibi Groovy özyineli kapatmayı kullanarak hedefime nasıl ulaşabilirim? Çok teşekkürler!
Aydınlanmış kod için çok teşekkürler. Yukarıdaki kod örnek listesi için çalışır: çalışır. Ya A.1.2'ye ihtiyacım varsa, A.1'e aittir; A.2.2 çalışması A.2'nin ikinci çocuğu mu? Sadece biraz sorumu düzenle. –
SubWorks'ün düzenli bir şekilde olmasını istiyorsanız, veri yapınızı değiştirmeniz gerekir. Buraya bakın, http://grails.org/doc/latest/guide/GORM.html#sets,ListsAndMaps. SortedSet'i kullanmak ve Work sınıfında compareTo yöntemini uygulamak istediğinizi düşünüyorum. –