2015-11-11 87 views
0

我想知道是否有可能在指數1,但不索引0中迅速插入元素,像這樣:你可以有一個不帶元素的數組索引0

  var array = [String]() 

      array.insert("cow", atIndex: 1) 

但每一次我嘗試,我得到舊的致命錯誤:數組索引超出範圍的錯誤消息。

反正有這個問題嗎?任何建議將不勝感激!謝謝!

+2

我的第一反應是你應該重新考慮你的架構。我可能是錯的,但是你認爲你需要這樣做的事實可能是一種難聞的氣味。你爲什麼需要做這樣的事情? – matt

回答

2

如果你讓自選數組並初始化你想第一要素的數量,就可以得到關。

var array = [String?]() 
for i in 0...5 { 
    array.append(nil) 
} 

array.insert("cow", atIndex: 1) 
+0

該死的,這是一個好主意。我從來沒有想過這個!謝謝! – MQLN

+0

也許你甚至可以實現這個功能,並將其添加爲擴展?或者那是不可能的? – Korpel

+1

對於任何我可能想要這樣做的情況,我可能會使用字典來代替。這只是一個有趣的問題。 :) –

0

您可以創建自定義列表。您將需要添加一些檢查,以確保項目不爲空或出指數等

void Main() 
{ 
    var list = new CustomList<string>(); 
    list.Add("Chicken"); 
    list.Add("Bear"); 

    list[1] = "Cow"; 

    list[1].Dump(); //output Cow 
} 

public class CustomList<T> 
{ 
    IList<T> list = new List<T>(); 

    public void Add(T item) 
    { 
     list.Add(item); 
    } 

    public T this[int index] 
    { 
     get 
     { 
      return list[index - 1]; 
     } 
     set 
     { 
      list[index - 1] = value; 
     } 
    } 
} 
0

字面上你不能。

一個項目可以在索引0

2

被插入到最大指數index(max) = array.count,空數組的情況下,如果你真的想要索引是特定的,而不是僅僅在陣列中的下一個可用位置,你應該使用帶有Int鍵的字典。

var dict = [Int:String]() 
dict[1] = "Cow" 
dict[5] = "Chicken" 
相關問題