2017-01-09 25 views
1

これは数回前に尋ねられたことがわかっていますが、特に私が探しているものは見つかりませんでした。 私は現在、コンソール上に縦棒としてint配列を表示するC#メソッドを記述しようとしています。私の考えは、1D配列を2Dに変換することです。 の場合input = {2, 1, 3};出力は次のようになるはずです:C#。 1D配列を2D配列に変換する方法

{{0, 0, 1}, 
{1, 0, 1}, 
{1, 1, 1}} 

私はコンソールに画像を表示するために私の選択の1と0を置き換えることができます。 は、これまでのところ、私の方法は、次のようになります。

public static void DrawGraph() 
    { 
     int[] randomArray = new int[3]{ 2, 1, 3 }; 
     int[,] graphMap = new int[3, 3]; 

      for(int i = 0; i < graphMap.GetLength(0); i++) 
      { 
       for(int j = 0; j < graphMap.GetLength(1); j++) 
       { 
        graphMap[i, j] = randomArray[j]; 
        Console.Write(graphMap[i, j]); 
       } 
       Console.WriteLine(); 
      } 
    } 

そして、それは、出力生成:2D配列を使用すると、印刷するためのツールとしてのみ関連している場合、あなたは完全にそれを残すことができます

2 1 3 
2 1 3 
2 1 3 
+0

配列2の最初の値では、2d配列0,1,1が1,0,1,1,1,0でないのはなぜですか? – BWA

+3

私はこれを何度か読んだことがあります。私はあなたの入力とあなたの出力との間のリンクを見ることができません。 –

+0

あなたの質問は何ですか? '{2、1、3}'入力が '{{0、0、1}、 {1、0、1}、 {1,1,1}}'を出力するのはなぜですか? 2D配列の列を1D配列まで合計することを検討していますか? – juharr

答えて

5

を。基本的に行い、これは、それがその後、入力から「最高バーを」発見は何

private static readonly char GraphBackgroundChar = '0'; 
private static readonly char GraphBarChar = '1'; 

void Main() 
{ 
    int[] input = {4, 1, 6, 2}; 
    int graphHeight = input.Max(); // using System.Linq; 

    for (int currentHeight = graphHeight - 1; currentHeight >= 0; currentHeight--) 
    { 
     OutputLayer(input, currentHeight); 
    } 
} 

private static void OutputLayer(int[] input, int currentLevel) 
{ 
    foreach (int value in input) 
    { 
     // We're currently printing the vertical level `currentLevel`. 
     // Is this value's bar high enough to be shown on this height? 
     char c = currentLevel >= value 
      ? GraphBackgroundChar 
      : GraphBarChar; 
     Console.Write(c); 
    } 
    Console.WriteLine(); 
} 

GraphBarCharinputのグラフのバーは、現在の高さで表示されるたびに、印刷、上から下へ各垂直レベルをループ。

いくつかのサンプル:

input = {2,1,3};

001 
101 
111 

入力= {2,4,1,0,3};

01000 
01001 
11001 
11101 

あなたの目標プラットフォームのサポートは、ボックス描画端末エミュレータ内の文字を、あなたはかなり説得力の棒グラフのための次の文字を使用することができた場合:

private static readonly char GraphBackgroundChar = '░'; 
private static readonly char GraphBarChar = '█'; 

入力= {2、1、3} ;

░░█ 
█░█ 
███ 

入力= {2,4、1,0、3};

░█░░░ 
░█░░█ 
██░░█ 
███░█ 
+0

はい、それはまさに私が探していたものです。どうもありがとうございました! –

+0

@TomasSmilgius私は助けることができてうれしい!私は私の答えでforループを更新して、何が起きているのかを明確にしました。 – cubrr

+0

ところで、@ TomasSmilgiusでは、答えの左上にあるチェックマークをクリックして回答を受け入れることができます。 – cubrr

0

はここでは、必要に応じて、それが動作

static void DrawGraph(int[] array) 
{ 
    int maxElementValue = 0; 
    foreach (int i in array) 
    { 
     if (i > maxElementValue) maxElementValue = i; 
    } 

    for (int rowIndex= 0; rowIndex < maxElementValue; ++rowIndex) 
    { 
     foreach (int i in array) 
     { 
      Console.Write((i < rowIndex - columnIndex ? 0 : 1) + " "); 
     } 

     Console.WriteLine(); 
    } 
} 

既に与えられたものよりも優れて機能です。

関連する問題