2017-01-28 4 views
0

誰かが私が'System.Collections.Generic.Dictionary <int型、System.Collections.Generic.Dictionary <string,int>> .Dictionary(int型)' の最良のオーバーロードされたメソッドの試合

を、このコンパイルエラーを把握助けることができます最適化されたオーバーロードされたメソッドは、 と一致します。 'System.Collections.Generic.Dictionary> .Dictionary(int)' に無効な引数があります。コンパイルエラー(行13、列5): 引数1: から変換できません 'System.Collections.Generic.IEnumerable >>' 'int'最終実行日:8:16:27 pmコンパイル:0s実行:0.188sメモリ:0B CPU:私は、キーと値のペア

[1] = new Dictionary<string,int>(), 
[2] = new Dictionary<string,int>(), 
. 
. 
. 
[21] = new Dictionary<string,int>() 
で辞書を初期化しようとしている私のコード

using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Linq; 
class Solution 
{ 
    static void Main(String[] args) 
    { 
     int N = Int32.Parse(Console.ReadLine()); 
     var counter = new Dictionary<int, Dictionary<string, int>> 
      (
       Enumerable.Range(1,21) 
       .Select(i => new KeyValuePair<int, Dictionary<string, int>>(i, new Dictionary<string, int>())) 
      ); 
     for(int i = 0; i < N; ++i) 
     { 
      string[] input = Console.ReadLine().Split(' '); 
      switch(input[0]) 
      { 
       case "add":     
        for(int j = 1; j < input[1].Length; ++j) 
        { 
         string sub = input[1].Substring(0,j); 
         if(counter[j].ContainsKey(sub)) 
          counter[j][sub] += 1; 
         else 
          counter[j][sub] = 1; 
        } 
        break; 
       case "find": 
        Console.WriteLine 
        (
         counter[input[1].Length].ContainsKey(input[1]) 
         ? counter[input[1].Length][input[1]] 
         : 0 
        ); 
        break; 
       default: 
        break; 
      } 
     } 
    } 
} 

Enumerable.Range(1,21)部分を指している0

また、C#には、(この問題の場合はhttps://www.hackerrank.com/challenges/contactsの)部分文字列の高速検索で文字列のコレクションを保持しようとすると、より良いデータ構造があるのか​​不思議です。

+0

あなたは 'Enumerable.Range(1,21).ToDictionary(トン=>トン、新しい辞書を())を使用することができます;' – Saravanan

+0

共有コードの小さな修正@Saravanan。それは 'var counter = Enumerable.Range(1、21).ToDictionary(t => t、t =>新しい辞書()); ' –

+0

@ChetanRanpariya:あります:) – Saravanan

答えて

2

ディクショナリのパラメータ化されたコンストラクタでは、最初の引数が "int"で、2番目に "IEqualityComparor"型が必要です。

https://msdn.microsoft.com/en-us/library/6918612z(v=vs.110).aspx

あなたのコードの一部として正しく渡されているのなし。

あなたがさらに簡単コードに次の行を使用することができますコメントでSaravananで述べたようにまた

var counter = new Dictionary<int, Dictionary<string, int>>(); 
foreach (var i in Enumerable.Range(1,21)) 
{ 
    counter.Add(i, new Dictionary<string, int>()); 
} 

を簡素化することができます。

var counter = Enumerable.Range(1, 21).ToDictionary(t => t, t => new Dictionary<string, int>()); 
関連する問題