2014-06-27 80 views
0

我有另一個問題轉換數組從PHP到C#。C#轉換幫助和PHP

public $array = array(103 => array('', ''), 102 => array('', ''), 101 => array('', '', ''), 100 => array('', '', '', '')); 

這是我有:

public Dictionary<int, List<string>> waddlesById = new Dictionary<int, List<string>>(); 

問題是,每當我這樣做:

sizeof($this->array[$waddleId]) - 1 

,等於-1,但是如果在C#中做到這一點:

waddlesById[waddleId].Count - 1 

等於0. 這是我的構造函數:

string maxSeats = String.Empty; 
      foreach (int waddleId in sledRacing) 
      { 
       switch (waddleId) 
       { 
        case 103: 
        case 102: 
         maxSeats = ","; 
         break; 

        case 101: 
         maxSeats = ",,"; 
         break; 

        case 100: 
         maxSeats = ",,,"; 
         break; 
       } 
       if (waddlesById.ContainsKey(waddleId)) 
       { 
        waddlesById[waddleId].Add(maxSeats); 
       } 
       else 
       { 
        List<string> newInner = new List<string>(); 
        newInner.Add(maxSeats); 
        waddlesById.Add(waddleId, newInner); 
       } 
      } 

任何幫助表示讚賞

+3

你有沒有考慮重新設計你的代碼,而不是試圖將其直接移植到C#? –

+0

@SimonWhitehead我還沒有,沒有必要去做 – user3771693

+0

@ user3771693,那麼你不得不這樣做,因爲'array'與'List'不一樣...... – developerwjk

回答

0

我認爲你在C#中混淆了列表和數組。 @Simon Witehead是對的,你可能需要用C#習語來重新思考你的代碼。同時它讓我想起了LookUp類型(我相信這不是那個衆所周知的),而且我儘量以(有希望)某種有用的方式回答你的問題。

在此之前,讓我清楚的一兩件事第一:我假設你正在試圖創建與此代碼的數組:如果這是正確的

maxSeats = ",,,"; 

,那麼這裏就是你如何創建具有三個元素的數組:

var myArray = new string[3]; 
// or similar to your PHP code 
var myArray = new string[] { "", "", "" }; 

至於查找例如,我認爲,它提供了做這種任務更加C#慣用方式:

var sledRacing = new[] { 100, 102, 103, 100, 100, 102, 101 }; 

var lu = sledRacing.ToLookup(
     k => k, 
     k => k == 100 ? new string[3] : (k == 101 ? new string[2] : new string[1]) 
    ); 

foreach (var g in lu) 
{ 
    Console.WriteLine(g.Key); 
    foreach (var i in g) 
    { 
     Console.WriteLine(" - " + i.Length); 
    } 
} 

這將產生以下輸出:

100 
    - 3 
    - 3 
    - 3 
102 
    - 1 
    - 1 
103 
    - 1 
101 
    - 2 

說了這麼多(不知道很多關於PHP,所以如果語言缺乏動態大小的數組或列表和比較,我不能告訴),您可能需要重新思考你的代碼:如果你想使用一個List,那麼你不需要調整它的大小來開始。然後,您可能希望更加「面向對象」,並將「賽跑Waddle」封裝在一個類中,並使用字典(或LookUp)通過它們的ID爲它們編制索引等等。

還有一個類似的example on MSDN using LookUp type,這可能也有幫助。