मैं हर तत्व सूचकांकों तक पहुँच के साथ संकलन समय रैंक पर एक अज्ञात की एक सरणी की गणना करने के लिए एक समाधान की तलाश में था। मैंने पैदावार के साथ समाधान देखा, लेकिन यहाँ कोई और उपज नहीं है। यह पुराने स्कूल में न्यूनतम है। इस उदाहरण में AppendArrayDebug () केवल StringBuilder बफर में सभी तत्वों को प्रिंट करता है।
public static void AppendArrayDebug ( StringBuilder sb, Array array )
{
if( array == null || array.Length == 0 )
{
sb.Append( "<nothing>" );
return;
}
int i;
var rank = array.Rank;
var lastIndex = rank - 1;
var indices = new int[rank];
var lower = new int[rank];
var upper = new int[rank];
for( i = 0; i < rank; ++i )
{
indices[i] = lower[i] = array.GetLowerBound( i );
upper[i] = array.GetUpperBound( i );
}
while( true )
{
BeginMainLoop:
var element = array.GetValue( indices );
sb.AppendLine();
sb.Append( '[' );
for( i = 0; i < rank; ++i )
{
sb.Append( indices[i] );
sb.Append( ' ' );
}
sb.Length -= 1;
sb.Append( "] = " );
sb.Append( element );
for( i = lastIndex; i > 0; )
{
if( ++indices[i] <= upper[i] )
goto BeginMainLoop;
indices[i] = lower[i];
--i;
}
if( ++indices[0] > upper[0] )
break;
}
}
उदाहरण के लिए निम्न सरणी निम्न आउटपुट का उत्पादन करेगी:
var array = new [,,]
{
{ { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 }, { 10, 11, 12 } },
{ { 13, 14, 15 }, { 16, 17, 18 }, { 19, 20, 21 }, { 22, 23, 24 } }
};