2015-03-03 49 views
0

我想創建一個很好的方法來存儲3個變量,兩個int s和一個在C#編程中。3個變量的信息存儲

我認爲一個方式,通過使用字典

Dictionary<int, Point>[] ItemList = new Dictionary<int, Point>[4]; 

的想法是,一個變量必須是1和4之間的陣列,所以我將具有作爲分選點,或每個陣列位置。第二個int必須介於0和15之間,並且該點位於4x4網格上。我認爲這種方法是可行的,除了你不能在字典中使用相同的密鑰,並且由於兩個整數都將被重複,我不能將它們交換出去。這個想法也被廢棄了,同樣的問題

Dictionary<int, int>[,] ItemList = new Dictionary<int, int>[4,4]; 

我也想過用元組,我沒有太多的(任何)體驗它,我與他們的實驗是不打算那麼好。它的問題是我無法得到它有多少物品的數量。我這樣做了一個。

Tuple<int, Point>[] ItemList = new Tuple<int, Point>[4]; 

同樣的想法作爲我的第一個例子,它只是有這樣的

ItemList[1].Count /*OR*/  ItemList[1].Length 

沒有代碼,請讓我知道如果我失去了一些東西與元組非常明顯的,或者建議一個不同的存儲方法將所有3個變量全部存儲在一起會很好。

回答

0

那麼,使用使用列表的想法,我解決了我的問題。它是一種混合使用陣列的建議想法和我最初的想法之間的混合體。如果你正在尋找類似的東西,你不需要使用數組,你可以使用一個帶有3個值的元組,我只需要一個int值的數組,因爲我需要它們分開存儲,基於那個int值是(在0和4之間)。這是一些可以工作的代碼。

 List<Tuple<int, Point>>[] ItemList = new List<Tuple<int, Point>>[4]; // how to declare it 

     for (int i = 0; i < 4; i++) 
     { 
      ItemList[i] = new List<Tuple<int, Point>>(); // initilize each list 
     } 

     ItemList[1].Add(new Tuple<int, Point>(5, new Point(1, 2))); // add a new tuple to a specific array level 

     int count = ItemList[1].Count; // finds the count for a specific level of the array --> (1) 

     int getInt = ItemList[1].ElementAt(0).Item1; // finds int value --> (5) 
     Point getPoint = ItemList[1].ElementAt(0).Item2; // finds the point --> (1,2) 
0

可以使用Tuple直接存儲在3層數據結構。 A Tuple可以有兩個以上的項目和任何類型。這樣,您就不必使用數組:

Tuple<int, int, Point> 

要得到的值,使用相應的Item財產。對於第一個int,它將是yourTuple.Item1。對於第二個yourTuple.Item2和點yourTuple.Item3

如果您有多個Tuples,你可以用一個經典的List來存儲他們所有:

var tuples = new List<Tuple<int, int, Point>>(); 

因爲它是一個列表,你可以很容易地計數:tuples.Count()

+0

我想我仍然需要這個數組來達到我的目的,因爲我只需要檢查具有特定值的整數,而數組是一個簡單的方法,但這是一個好主意。我會用這個嘗試一些事情。 – DurpBurger 2015-03-03 03:19:38

+0

該列表是一個'IEnumerable',所以你可以使用LINQ查詢。例如,如果您只需要以2作爲第一個int的元組,則可以使用像'tuples.Where(t => t.Item1 == 2)'這樣的'Where'查詢。 – 2015-03-03 03:21:08

0

所以一個class好像適合我的結構。

public class Something { 

    public int Item1 { get; set; } 
    public int Item2 { get; set; } 
    public Point Location { get; set; } 
} 

那你這些對象存儲在List<>

var List<Something> list = new List<Something>(); 

項目添加到列表...

list.Add(new Something() {Item1 = 4, Item2 = 8, Point = new Point(x,y)}); 

然後使用一些LINQ來獲得你想要的人。

var onlyItem1IsFour = (from item in list where 4 == item.Item1 select item).ToList(); 

請原諒我的LINQ。我習慣了VB,可能已經得到了外殼/語法有點錯誤