2016-01-04 59 views
0

我有一個關聯數組在PHP

如何在c#中創建一個集合?

$data=array(
    100=>array(
     "first"=>array(4,24,5,0), 
     "second"=>array(42,58,23,8), 
     "third"=>array(4,1,14,0), 
     "fourth"=>array(49,41,28,2), 
     "fifth"=>array(41,30,13,5) 
    ), 
    500=>array(
     "first"=>array(4,24,5,0), 
     "second"=>array(42,58,23,8), 
     "third"=>array(4,1,14,0), 
     "fourth"=>array(49,41,28,2), 
     "fifth"=>array(41,30,13,5) 
    ) 
); 



,我想移動代碼到C#編程,但我不知道如何移動。我嘗試使用List,但我只能使用100和500。
如何將它移入c#編程?

+0

你已經做了正確的選擇:

然後你可以創建你的整數列表的字典的解釋,像這樣? – Ian

+0

請在'c#'中顯示你實際嘗試過的內容 – Jon

+1

@Ian A'List'不是一個關聯數組,所以你認爲它是否合適? – Servy

回答

3

使用Dictionary類。

所以,你可以做這樣的事情:

 var dict = new Dictionary<int, Dictionary<string, int[]>> 
     { 
      { 
       100, new Dictionary<string, int[]> 
       { 
        {"first", new[] {4, 24, 5, 0}}, 
        {"second", new[] {42, 58, 23, 8}} 
       } 
      }, 
      { 
       200, new Dictionary<string, int[]> 
       { 
        {"first", new[] {4, 24, 5, 0}}, 
        {"second", new[] {42, 58, 23, 8}} 
       } 
      } 
     }; 
+4

看起來像外部字典的關鍵是一個整數,而不是一個字符串。內部字典的值是一個int數組,不只是一個int。 – Servy

+0

這只是一個示例..但我剛更新了正確的實現 –

+0

它在C#6中更好用新的字典初始值設定程序 – juharr

2
var data = new Dictionary<int, Dictionary<string, List<int>>>(); 

關聯數組被稱爲Dictionary在C#

一點題外話:這感覺在C#中非常直觀:結束語多個列表/ Dictionarys彼此之間並不是最優雅的解決方案。


根據您的要求它可能是一個更好的方法來包裝這個構造內部類:

可能是這樣的:

public class DataContainer { 
    public int Index { get; set; } 
    public DataValue MyValue { get; set; } 
} 

public class DataValue { 
    public string Name { get; set; } 
    public List<int> IntegerValues { get; set; } 
} 

然後,你可以簡單地DataContainers的列表:var data = new List<DataContainer>();

1

我想你要找的字典:https://msdn.microsoft.com/en-us/library/xfhwa508(v=vs.110).aspx

這是我的東西,我認爲你貼(可以替代由INT []清單,以及)1對1映射:

注:我看到你內心的字典總是相同的,其有沒有點在具有2周內的字典但就像我說,它是我所看到的PHP地圖

  var mainDictionary = new Dictionary<int, Dictionary<string, List<int>>>(); 
      var firstInnerDictionary = new Dictionary<string, List<int>>(); 
      var secondInnerDictionary = new Dictionary<string, List<int>>(); 

      firstInnerDictionary.Add("first", new List<int>{4,24,5,0}); 
      mainDictionary.Add(100, firstInnerDictionary); 

      secondInnerDictionary.Add("first", new List<int>{4,24,5,0}); 
      mainDictionary.Add(500, firstInnerDictionary); 
2

關聯數組到Dictionary類的C#一個1對1映射。數字數組映射到List類,或映射到更直接的array(例如int [],string [])。 C#PHP之間

的一個主要區別是,C#strongly typed編程語言,這意味着你需要聲明的變量的類型。然後,您可以使用文字語法來構建字典。

var data = new Dictionary<int, Dictionary<string, int[] > >() 
{ 
    [100] = new Dictionary<string, int[] >() 
    { 
     ["first"] = new int[] {4, 24, 5, 0}, 
     ["second"] = new int[] {42, 58, 23, 8} 
     // the rest of the items 
    } 
    // the rest of the items 
}; 

注意。感謝@juharr指出,上述語法從C# 6起作用。對於先前的版本,類似的語法,可以用:

var data = new Dictionary<int, Dictionary<string, int[] > >() 
{ 
    { 100, new Dictionary<string, int[] >() 
     { 
      {"first", new int[] {4, 24, 5, 0} }, 
      {"second", new int[] {42, 58, 23, 8} } 
      // the rest of the items 
     } 
    } 
    // the rest of the items 
}; 
+0

應該注意,您需要C#6來處理這種字典初始化風格。 – juharr

+0

@juharr感謝您的通知,將更新答案 – Cristik

0

我的建議是使用Dictionary就象這樣:

var data = new Dictionary<int, Dictionary<string, List<int>>>; 
data[100] =new Dictionary<string, List<int>>(); 
data[100]["first"] = new List<int>(); 
data[100]["first"].AddRange(new [] {4, 24, 5, 0}); 
// etc... 

有字典和列表initialisers使代碼雖然比較緊湊。

3

列表和字典是要走的路。

首先,你應該確保你正在使用的泛型集合命名空間:

using System.Collections.Generic; 

在你的文件的頂部。通過使用`List`,什麼是你遇到了實施中的問題

var data = new Dictionary<int,Dictionary<string,List<int>>>() { 
    {100, new Dictionary<string, List<int>>() { 
     {"first", new List<int>() {4, 24, 5, 0}}, 
     {"second", new List<int>() {42, 58, 23, 8}} //TODO - add third, fourth etc. 
    }}, 
    {500, new Dictionary<string, List<int>>() { 
     {"first", new List<int>() {4, 24, 5, 0}}, 
     {"second", new List<int>() {42, 58, 23, 8}} //TODO - add third, fourth etc. 
    }} 
} 
相關問題