2016-08-04 16 views
1

私がしたいことは、以下のコメントで説明されています。どのようにすれば効率的に行うことができますか?2次元のC#配列をすべて同じ値に初期化するにはどうすればよいですか?

using System; 
using System.Collections.Generic; 
using System.IO; 
class Solution { 
    static void Main(String[] args) { 
     int n = Int32.Parse(Console.ReadLine()); 
     bool[][] flags = new bool[26][n]; // I want this to be a 26 x n array of false values 
     for(int k = 0; k < n; ++k) 
     { 
      string line = Console.WriteLine(); 
      for(int i = 0; i < line.Length; ++i) 
       flags[(int)line[i] - (int)'a'] = true; 
     } 
     int gems = flags.Count(arr => arr.Count(j => j == true) == arr.Length);  
     Console.WriteLine 
    } 
} 
+2

アレイはすでにすべて「false」に初期化されています。これは言語仕様の一部です。詳細はhttp://stackoverflow.com/a/15300089/56778を参照してください。 –

+1

すべての値をfalseにするには、なぜそれらをtrueに設定していますか? –

+0

[c#でのboolのデフォルト値](http://stackoverflow.com/questions/4996582/default-value-for-bool-in-c-sharp)の可能な複製 – progyammer

答えて

4

MultidimensionalアレイとJagged Array(アレイのアレイ)の間であなたが混乱しているように見えます。

2次元配列を探している場合は、これを単純に行うことができます。

bool[,] flags = new bool[26,n]; 
//or 
bool[,] flags = new bool[,]; 
bool[,] flags = new bool[26,]; 

ギザギザの配列の場合は、これを行うことができます。

bool[][] flags1 = new bool[26][]; 
flags1[0] = new bool[n]; // since you want n elements 
flags1[1] = new bool[n]; 
... 

// initialization 
flags1[0] = new bool[] {true, false}; 
flags1[1] = new bool[] {false}; 
7

LINQは、あなたの目標のために働く必要があります。

bool[][] flags = Enumerable.Range(0, 26).Select(_ => Enumerable.Repeat(true, n).ToArray()).ToArray(); 

それともジムMischelが言ったように:

bool[][] flags = Enumerable.Repeat(Enumerable.Repeat(true, n).ToArray(), 26).ToArray(); 

しかし、最初の例では、Select方法becuase少ないメモリを使用して再しません-を項目を通過するときに定義します。

+1

'flags = Enumerable.Repeat (Enumerable.Repeat(true、n).ToArray()、26).ToArray(); ' –

関連する問題