2010-03-11 77 views
1

我有以下decleration:如何使用通用字典中的通用字典?

private Dictionary<string, Dictionary<string, File>> listFiles = new Dictionary<string,Dictionary<string,File>>(); 

我如何將項目添加到字典?有沒有更好的方法來做這樣的事情? 信息:存儲源文件名,目標文件名和文件本身。

編輯1:只是想通了,我想存儲的是3個值,其中外部字典的第二個對象存儲字典對象,這不是真正實現它的最佳方式,因爲它總是會只包含一個KeyValuePair。

編輯2:與文件我的意思是二進制數據。

編輯3:我有一個未排序的文件列表,我需要排序,然後發送到別的地方。

+1

存儲集合中的 「文件」 是很明朗。文件是存放在磁盤上的東西,不在內存中。澄清你真正想要存儲的東西。 – 2010-03-11 16:34:57

+0

你想對數據做什麼?查看來源和/或目的地或只是來源? – RichardOD 2010-03-11 16:36:25

回答

2

可以使用

Dictionary<string, KeyValuePair<string, File>> 

希望這有助於!

+0

這與字典詞典不一樣,你無法擁有多個輔助鍵:它與1:N是1:1的對應關係。 – Kimi 2010-03-11 16:50:29

+0

我覺得他想要同樣的行爲! – viky 2010-03-17 04:47:18

2

你可以寫一個包裝類Dictionary<TKey1, TKey2, TValue> : Dictionary<TKey1, Dictionary<TKey2, TValue>>

0

要添加你會做這樣的事情了新的文件:

listFiles[srcFile] = new Dictionary<string, File>(); 
listFiles[srcFile][destFile] = file; 

注意這將覆蓋從現有的源文件中的任何映射。然而,看起來你真正想要的是一個來自(源) - >(dest,File)的映射,所以在這種情況下,我會讓一個類包含目標文件名和文件,然後創建一個包含此查找的字典:

public class DestinationFileInfo { ... } 

,然後創建一個Dictionary<string, DestinationFileInfo>

0

我在一個名爲DoubleKeyDictionary的類中做了一次。我需要字典對象的功能,但我有2個鍵。如果您將數據鎖定得非常緊密,您可以嘗試追加它,例如從密鑰#1中取出字符串,添加一個〜或某個分隔符,然後添加字符串#2,就像blue〜large一樣,這會給你唯一的密鑰。再說一遍,這對字符串更好,並且要求你鎖定數據,所以在你的字符串中不會寫滿整個東西。

所以我做的最初是你做的:詞典>,但語法有點笨拙。因此,儘管它沒有明確回答您的問題,但這是我的解決方案:

創建一個名爲MultiKeyDictionary的類,它內部包含一個DataTable,並具有一個用於檢索Customer對象或其他方法的方法。該方法使用params對象[],並使用DataTable.Select方法獲取對象。這樣你就可以擁有儘可能多的鑰匙。當然,您需要添加對象的方法。

0

當你發現自己嵌套一個通用的內部時,考慮創建一個類。例如:

// todo: give this a name that better describes its purpose 
public class FileContainer 
{ 
    string DestinationFileName { get; set; } 
    File File { get; set; } 
} 

,而不是現在這個樣子,:

Dictionary<string, KeyValuePair<string, File>> 

你可以用這個工作:

Dictionary<string, FileContainer>