簡體   English   中英

創建動態二維數組,根據c#wpf中的列表自動調整

[英]creating dynamic 2d array that automatically adjusts based on list in c# wpf

假設我有一個C#類的對象列表。 我希望有一個2d數組(或列表列表,或其他可以做同樣的事情),它可以保存列表中所有對象之間關系的信息。 這個類看起來像這樣:

public class SimplePoint
{
    public string strName{ get; set; }
};

public class SimpleRoute
{
    public int iDistance{ get; set; }
};

public class Place
{
    public ObservableCollection<SimplePoint> points;

    // Below array should dynamically increase/decrease size 
    // depending on length of list of points
    // The array should store 2 values for each possible set of points:
    // distance from x to y, and distance from y to x
    public SimpleRoute[, ] routes;
};

2d數組/表的列表中的每個元素應具有一行和一列。 將元素添加到列表時,2d數組應在兩個方向上增長,並且當刪除元素時,表/數組應在兩個方向上縮小。

上面代碼中聲明的二維數組顯然不適用於此。 相反,我想知道'SimpleRoute'類是否能以某種方式保留ObservableCollection'點',並在內部維護距離數據表。

后來我希望能夠將來自2d數組/表的數據 - 或者來自其后面/周圍的類 - 的數據存儲在XML中(通過序列化),並且能夠再次加載它(通過反序列化)。 與“簡單點”列表的關系應保持。 最后,自動調整表中的數據(即距離)應該由用戶編輯。 我將使用WPF創建GUI。

我想知道在C#/ .NET中最好的方法是什么,但是很難想到優雅的東西。 雖然我可能在錯誤的地方尋找,但搜索並沒有產生很多結果。

也許有一些簡單的解決方案? 我相對較新的.NET編程。

我認為您是在尋求有關.net /一般OOP慣例的廣泛領域的信息,因此,在沒有一點上下文的情況下很難提供一個體面的答案,但是我將盡力為您提供一些指導。

我假設您有兩個類,例如Group和Person,具有以下簡單定義:

class Group
{
    public string name { get; set; }
    public List<Person> Persons = new List<Person>();
}
class Person
{
    public string name { get; set; }
    public int age { get; set; }
    public Person(string name, int age)
    {
        this.name = name;
        this.age = age;
    }
}

您已經創建了與對象Person具有1:N關系的對象組。 您可以使用以下測試功能來測試此方法:

public static void test()
{
    Group group =new Group();
    group.name= "Friends";

    Person p = new Person("John",30);
    Person p2 = new Person("Rute",25);
    Person p3= new Person("Richard",17);

    group.Persons.Add(p);
    group.Persons.Add(p2);
    group.Persons.Add(p3);

    foreach(Person person in group.Persons)
    {
        Console.WriteLine("{0} is {1} years old. He is in group {2}.",person.name,person.age,group.name);
    }
}

這是你的意圖嗎? 如果你想創建一個不同類型的關系(N:N,N:1),我可以修改我的代碼來幫助你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM