2017-08-31 45 views
3

我正在寫一個小PROGRAMM現在在我做了一個帕班,其中一個對象由一個鍵和一個值覆寫數組條目時它有一個重複鍵

class Paar 
{ 
    private object value1; 

    public Paar(string key, object value1) 
    { 
     this.key = key; 
     this.value = value1; 
    } 

    public string key; 
    public object value; 
} 

我做了的Put和一個Get類的方法。 PUT方法解析在第一個開槽的新條目發現,可以使用通過調用鍵打印的條目Get方法,他們是如下

private Paar[] getArray = new Paar[10]; 

    public void Put(string key, object value) 
    { 
     int i = 0; 
     while (true) 
     { 
      if (getArray[i] == null) 
      { 
       break; 
      } 
      else 
      { 
       i++; 
       if (i == 10) 
       { 
        throw new Exception("All slots full"); 
       } 
      } 
     } 
     getArray[i] = new Paar(key, value); 
    } 

    public object Get(string key) 
    { 
     for (int i = 0; i <= 9; i++) 
     { 
      Paar currentElement = getArray[i] 

      if (currentElement.key == key) 
      { 
       return currentElement.value; 
      } 
     } 
     throw new Exception("Invalid key"); 
    } 

「問題」是,那個時候我有兩個具有相同鍵的條目,我只能打印第一個條目,而我想向Put方法添加一個函數,用相同的鍵覆蓋以前的條目並打印最近的條目。

E.g:

newMap.Put("Key2", "Value1"); newMap.Put("Key2", "Value2"); newMap.Put("Key2", "Value3"); 
Console.WriteLine(newMap.Get("Key2")); 

目前將打印值1,而我想它打印值3。有什麼辦法可以做到這一點?

+0

是否有你使用數組而不是字典的原因? – mjwills

+0

被授權使用對象數組 –

+3

你能問他們爲什麼要你這樣做嗎?你的問題空間是**完美**的字典。 – mjwills

回答

0

我實現tchelidze的答案,因爲它在技術上是正確的,但是當後來實現Remove方法,它不能正常工作,所有的時間,因爲它也能解析複製鑰匙的進入的如果碰巧在重複密鑰的槽位之前有一個空槽,因爲它檢查了空槽或匹配密鑰。所以我改進了函數以通過兩個獨立的循環。

public void Put(string key, object value) 
{ 
    for (int i = 0; i < getArray.Length; i++) 
    { 
     if (getArray[i] != null && getArray[i].key == key) 
     { 
      getArray[i] = new Paar(key, value); 
      return; 
     }   
    } 
    for (int i = 0; i < getArray.Length; i++) 
     { 
      if (getArray[i] == null) 
      { 
       getArray[i] = new Paar(key, value); 
       break; 
      } 
      else 
      { 
       if (i >= getArray.Length) 
       { 
        throw new Exception("All slots full"); 
       } 
      } 
     } 
    } 
3

嘗試以下

public void Put(string key, object value) 
{ 
    for (var i = 0; i < getArray.Length; ++i) 
    { 
     if (getArray[i] == null || getArray[i].key == key) 
     { 
      getArray[i] = new Paar(key, value); 
      break; 
     } 
     if(i == getArray.Length - 1) 
      throw new Exception("All slots full"); 
    } 
} 
相關問題