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

  • AndyMcMillinTV

    AndyMcMillin

    6 HAZİRAN 2007
  • Perihelion

    Perihelion

    23 NİSAN 2008
  • Peter Sharp

    Peter Sharp

    11 ŞUBAT 2013