2012-04-02 9 views
1

不特定のランクとサイズの配列の各要素をどのように書くことができますか?不特定のランクとサイズの配列を書く

私はMSTestのテストケースをいくつか書いたことがあります。 3つのテストでは、スカラー、1次元および2次元データ、さらに文字列、2重および整数データが​​チェックされます。

[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

は、ここに質問はありますか? –

+0

申し訳ありませんが、私は質問として言い換えました。 – SimplyKnownAsG

答えて

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

関連する問題