2011-06-26 62 views
5

我想創建一個新的列表與關鍵的一個新的列表和值生成與關鍵

List<object> r = new List<object>(); 
r.Add("apple"); 
r.Add("John"); 
return r; 

當u Addwatch的R,你會看到

[1] = apple 
[2] = John 

問題:如何使[1]和[2]是新密鑰?當我追加r時,我想看到[1]被Name取代。如下所示:

Name = apple 
TeacherName = John 
+2

你提的問題是很難理解的 - 嘗試清理你想說什麼。這聽起來像你想要一個字典,它允許你使用一個鍵/值對 – Prescott

回答

10

你的意思是你想使用類似Dictionary<TKey, TValue>

例如:

Dictionary<string, string> d = new Dictionary<string, string>(); 
d.Add("Name", "Apple"); 
d.Add("Teacher", "John"); 

或你想要的目的是更強類型? 在這種情況下,你必須使用你的一個類/結構

class MyObject 
{ 
public string Name {get; set;} 
public string Teacher {get; set;} 
} 

然後

var list = new List<MyObject>(); 
list.Add(new MyObject { Name = "Apple", Teacher = "John" }); 
list.Add(new MyObject { Name = "Banana", Teacher = "Setphan" }); 

那麼你可以一切

var item = list[0]; 
var name = item.Name; 
var teacher = item.Teacher; 
0

你的問題不明確,很難理解。

你的意思是說你想要鍵而不是索引?像名稱而不是1

那麼作爲AlizaBumble Bee說你需要使用字典,而不是一個列表。

這裏有一個小例子

IDictionary<string, Interval> store = new Dictionary<string, string>(); 

store.Add("Name","apple"); 
store.Add("TeacherName ", John); 

foreach(KeyValuePair<string, string> e in store) 
    Console.WriteLine("{0} => {1}", e.Key, e.Value); 
1

我希望我不要讓這裏的任何語法錯誤......

Dictionary <string, int> r = new Dictionary<string,int>(); 
r.add("apple",1); 
r.add("John",2) 
console.WriteLine(r["apple"]);//returns value 1 
2

您可以將您的列表:

List<object> r = new List<object>(); 
r.Add("apple"); 
r.Add("John"); 
r.Add("orange"); 
r.Add("Bob"); 

var dict = r.Where((o, i) => i % 2 == 0) 
    .Zip(r.Where((o, i) => i % 2 != 0), (a, b) => new { Name = a.ToString(), TeacherName = b.ToString() }); 

foreach (var item in dict) 
{ 
    Console.WriteLine(item); 
} 

輸出:

{ Name = apple, TeacherName = John } 
{ Name = orange, TeacherName = Bob } 

然後轉化爲詞典:

var result = dict.ToDictionary(d => d.Name, d => d.TeacherName);