SORU
14 Ocak 2009, ÇARŞAMBA


Nasıl verimli bir şekilde düz bir yapıdan bir ağaç oluşturmak için?

Düz bir yapı nesneleri bir grup var. Bu nesneler, ağaçlar yerleştirilmiş olabilir ID ParentID bir özelliği var. Özel bir sırada. ParentID her özelliğin mutlaka yapısında ID ile uyuşmuyor. Bu nedenle onların çeşitli ağaçlar bu nesnelerin içinden çıkan olabilir.

Nasıl bu nesneleri elde edilen ağaç oluşturma işlemi istiyorsunuz ?

Şimdiye kadar bir çözüm ama en uygun o kadar emin değilim...

Doğru sırayla bir veritabanı içine Veri eklemek için bu ağaçları oluşturmak için ihtiyacım var.

Döngüsel başvurular var. Bir Düğüm ParentID diğer nesneleri bulunamıyor zaman zaman ParentID == null) veya bir RootNode

CEVAP
14 Ocak 2009, ÇARŞAMBA


Karma tablo belirli nesne eşleme nesnelerin Kimliklerini saklamak. Tüm nesneleri numaralandırma ve eğer varsa, üst bulmak ve üst işaretçi buna göre güncelleyin.

class MyObject
{ // The actual object
    public int ParentID { get; set; }
    public int ID { get; set; }
}

class Node
{
    public List<Node> Children = new List<Node>();
    public Node Parent { get; set; }
    public MyObject AssociatedObject { get; set; }
}

IEnumerable<Node> BuildTreeAndGetRoots(List<MyObject> actualObjects)
{
    Dictionary<int, Node> lookup = new Dictionary<int, Node>();
    actualObjects.ForEach(x => lookup.Add(x.ID, new Node { AssociatedObject = x }));
    foreach (var item in lookup.Values) {
        Node proposedParent;
        if (lookup.TryGetValue(item.AssociatedObject.ParentID, out proposedParent)) {
            item.Parent = proposedParent;
            proposedParent.Children.Add(item);
        }
    }
    return lookup.Values.Where(x => x.Parent == null);
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Bad Lip Reading

    Bad Lip Read

    22 Mart 2011
  • Matus Slovak

    Matus Slovak

    5 Temmuz 2007
  • bored before i even began

    bored before

    30 Mart 2009