2012-04-02 7 views
1

지정되지 않은 순위와 크기의 배열의 모든 요소를 ​​작성하려면 어떻게해야합니까?지정되지 않은 순위와 크기의 배열을 작성하십시오.

더 명확하게하기 위해 MSTest에 대한 몇 가지 테스트 사례도 작성했습니다. 세 가지 테스트는 스칼라, 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

관련 문제