2012-04-02 61 views
1

如何寫出未指定的排列和大小的數組的每個元素?爲了希望更明確一點,我還爲MSTest編寫了一些測試用例。 這三個測試檢查標量,一維和二維數據以及字符串,雙精度和整數數據。寫一個未指定的排列和大小的數組

[TestMethod()] 
public void TestWrittenScalarIsCorrect() 
{ 
    Array data = Array.CreateInstance(typeof(string), 1); 
    data.SetValue("hello", 0); 
    Assert.AreEqual(0, data.Rank); 
    // nothing fancy 
    Assert.AreEqual("[hello]", WriteArray(data)); 
} 

[TestMethod()] 
public void TestWritten1DIsCorrect() 
{ 
    // note: I'm expecting 1.0 => '1' 
    Assert.AreEqual("[1, 1.1]", 
     YamlWriter.WriteArray(new double[] { 1.0, 1.1 })); 
} 

[TestMethod()] 
public void TestWritten2DIsCorrect() 
{ 
    // Note: expecting 00 and 01 to be 0 and 1, respectively 
    Assert.AreEqual("[[0, 1], [10, 11]]", 
     WriteArray(new int[,]{ {0, 1}, {10, 11}})); 
} 

[TestMethod()] 
public void TestWritten3DIsCorrect() 
{ 
    var data = new int[3, 3, 3]; 
    for (int kk = 0; kk < 3; kk++) 
    { 
     for (int jj = 0; jj < 3; jj++) 
     { 
      for (int ii = 0; ii < 3; ii++) 
      { 
       data[kk, jj, ii] = kk * 100 + jj * 10 + ii; 
      } 
     } 
    } 

    // Note: expecting 00 and 01 to be 0 and 1, respectively 
    Assert.AreEqual("[[[0, 1, 2], [10, 11, 12], [20, 21, 22]], " 
        + "[[100, 101, 102], [110, 111, 112], [120, 121, 122]], " 
        + "[[200, 201, 202], [210, 211, 212], [220, 221, 222]]]",  
      WriteArray(data)); 
} 

謝謝!

+3

有一個問題會在這裏? – 2012-04-02 15:14:11

+0

對不起,我把它改成了一個問題。 – SimplyKnownAsG 2012-04-02 15:43:36

回答

1

如果我理解正確的話,你想是這樣的:

public string WriteArray(Array data) 
    { 
     return WriteArray(data, new Stack<int>()); 
    } 

    public string WriteArray(Array data, Stack<int> dim) 
    { 
     //edit 
     if (dim.Count == data.Rank) return data.GetValue(dim.Reverse().ToArray()).ToString(); 

     List<string> elementStrings = new List<string>(); 
     int length = data.GetLength(dim.Count); 

     for (int i = 0; i < length; i++) 
     { 
      dim.Push(i); 
      string elem = WriteArray(data, dim); 
      dim.Pop(); 

      elementStrings.Add(elem); 
     } 

     return "[" + string.Join(", ", elementStrings) + "]"; 
    } 

編輯:新增失蹤.Reverse()

+0

是的,那太棒了! – SimplyKnownAsG 2012-04-02 16:23:11