2011-02-16 17 views
0

比方說,我想要列出我附近的所有地址。如果他們住在任何地址,我也想將朋友的姓名和電話號碼關聯起來。但並不是每個地址都有一個住在那裏的朋友,因爲完全陌生的人住在很多地址,但相反地,不止一個朋友可能住在同一個地址。總的來說,我需要一個地址列表,以及所有這些字符串的關聯,這些字符串以名稱/電話號碼對的形式出現在任何居住在這些地址的朋友身上。搜索這些數據的索引只是地址,我不需要通過名字或電話號碼訪問信息,但如果地址有朋友住在那裏,我想循環訪問這些數據。我應該用什麼C#數據結構將不同數量的鍵/值對映射到字符串列表?

什麼是最好的C#數據結構在這種情況下使用,你可能給我一些示例代碼顯示它的實現?非常感謝。

回答

1

Dictionary類是您的最佳選擇。即使您可以使用本機KeyValuePair或Tuple類之一,我也會創建一個幫助類來存儲名稱/電話號碼鍵值對。最後,代碼如下所示:

class ContactInfo 
{ 
    string Name; 
    string TelephoneNumber; 
} 

Dictionary<string, ICollection<ContactInfo>> addressAndPeopleLivingThere = 
    new Dictionary<string, ICollection<ContactInfo>>(); 

addressAndPeopleLivingThere.Add("1 Some Street", new List<ContactInfo>()); 
addressAndPeopleLivingThere["1 Some Street"].Add(new ContactInfo { Name = "Name", TelephoneNumber = "000-000-0000" }); 
+0

謝謝幫助,這對我來說是最清楚的答案。 – Monochrome 2011-02-16 01:16:18

+0

如何迭代每個ContactInfo類的屬性,將其值輸出到控制檯?對於Dictionary的關鍵字,我沒有任何問題,但是我創建的每個類都有哪些?這是我已經得到了鑰匙: 的foreach(KeyValuePair <字符串,ICollection的> KVP在addressAndPeopleLivingThere { Console.WriteLine(kvp.Key);} – Monochrome 2011-02-16 03:19:58

1

您應該創建表示您的域的類型。 喜歡的東西:

public class Address{ 
    public string StreetName{get;set;} 
    public List<Person> Friends{get;set;} 
} 
public class Person{ 
    public string Name{get;set;} 
    public string Phone{get;set;} 
} 

,那麼你在操作的列表。

List<Address> addresses = new List<Address>; 

    var addWithFriends = from c in addresses where c.Count > 0 select c; 
0

你可能想的ILookup<string, Friend>Dictionary<string, IEnumerable<Friend>>,這基本上相當於同樣的事情。既然你要包括所有的地址,建設將是一個小比簡單ToDictionaryToLookup更復雜,但它也不是太糟糕:

var friendsByAddress = friends.ToLookup(f => f.Address); 
var addressesWithFriends = addresses.ToDictionary(
    a => a, 
    a => !friendsByAddress.Contains(a) ? Enumerable.Empty<Friend>() : friendsByAddress[a]); 

使用這個很簡單:

var friendsAtAddress = addressesWithFriends[address]; 
foreach(var friend in friends) 
{ 
    ... 
} 
相關問題