C# 与';System.Collections.Generic.Dictionary<;int,System.Collections.Generic.Dictionary<;字符串,int>>;。字典(int)和#x27;

C# 与';System.Collections.Generic.Dictionary<;int,System.Collections.Generic.Dictionary<;字符串,int>>;。字典(int)和#x27;,c#,.net,linq,dictionary,data-structures,C#,.net,Linq,Dictionary,Data Structures,有人能帮我找出这个编译错误吗 编译错误(第10行,第17列):最佳重载方法匹配 对于 'System.Collections.Generic.Dictionary>.Dictionary(int)' 有一些无效参数编译错误(第13行,第5列): 参数1:无法从转换 'System.Collections.Generic.IEnumerable>>' 至“int”上次运行时间:8:16:27 pm编译:0s执行:0.188s内存:0b CPU:0s 它指向我的代码中的可枚举的.Range(1,21

有人能帮我找出这个编译错误吗

编译错误(第10行,第17列):最佳重载方法匹配 对于 'System.Collections.Generic.Dictionary>.Dictionary(int)' 有一些无效参数编译错误(第13行,第5列): 参数1:无法从转换 'System.Collections.Generic.IEnumerable>>' 至“int”上次运行时间:8:16:27 pm编译:0s执行:0.188s内存:0b CPU:0s

它指向我的代码中的
可枚举的.Range(1,21)
部分

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;
            }
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.IO;
使用System.Linq;
类解决方案
{
静态void Main(字符串[]参数)
{
intn=Int32.Parse(Console.ReadLine());
var计数器=新字典
(
可枚举范围(1,21)
.Select(i=>newkeyvaluepair(i,newdictionary()))
);
对于(int i=0;i
我正在尝试用键值对初始化字典

[1] = new Dictionary<string,int>(), 
[2] = new Dictionary<string,int>(),
.
.
.
[21] = new Dictionary<string,int>()
[1]=新字典(),
[2] =新字典(),
.
.
.
[21]=新词典()

另外,我很好奇C#是否有更好的数据结构,可以通过快速查找子字符串来保存字符串集合(对于这个问题)。

Dictionary的参数化构造函数要求第一个参数为“int”,第二个参数为“IEqualityComparor”

所有这些都没有作为代码的一部分正确传递

你可以简化

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=newdictionary();
foreach(可枚举范围(1,21)中的var i)
{
添加(i,新字典());
}
正如Saravanan在评论中提到的,您可以使用下面这行代码来编写更简单的代码

var counter = Enumerable.Range(1, 21).ToDictionary(t => t, t => new Dictionary<string, int>());
var counter=Enumerable.Range(1,21).ToDictionary(t=>t,t=>newdictionary());

字典的参数化构造函数要求第一个参数为“int”,第二个参数为“IEqualityComparor”

所有这些都没有作为代码的一部分正确传递

你可以简化

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=newdictionary();
foreach(可枚举范围(1,21)中的var i)
{
添加(i,新字典());
}
正如Saravanan在评论中提到的,您可以使用下面这行代码来编写更简单的代码

var counter = Enumerable.Range(1, 21).ToDictionary(t => t, t => new Dictionary<string, int>());
var counter=Enumerable.Range(1,21).ToDictionary(t=>t,t=>newdictionary());

您可以使用
Enumerable.Range(1,21).ToDictionary(t=>t,newdictionary())
@Saravanan您共享的代码中有一个小的更正。它应该是
var counter=Enumerable.Range(1,21).ToDictionary(t=>t,t=>newdictionary())
@ChetanRanpariya:明白了:)你可以使用
Enumerable.Range(1,21).ToDictionary(t=>t,newdictionary())
@Saravanan您共享的代码中有一个小的更正。它应该是
var counter=Enumerable.Range(1,21).ToDictionary(t=>t,t=>newdictionary())@ChetanRanpariya:明白了:)