当前位置: 首页>>代码示例>>C#>>正文


C# ILookup.ToDictionary方法代码示例

本文整理汇总了C#中ILookup.ToDictionary方法的典型用法代码示例。如果您正苦于以下问题:C# ILookup.ToDictionary方法的具体用法?C# ILookup.ToDictionary怎么用?C# ILookup.ToDictionary使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在ILookup的用法示例。


在下文中一共展示了ILookup.ToDictionary方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: Detect

        /// <summary>
        /// Detects which rules in a <see cref="Grammar"/> are mutually left-recursive.
        /// </summary>
        /// <param name="leftAdjacentExpressions">The set of left-adjacent <see cref="Expression">expressions</see> to inspect.</param>
        /// <returns>A <see cref="HashSet{T}"/> containing the mutually left-recursive rules.</returns>
        public static HashSet<Rule> Detect(ILookup<Rule, Expression> leftAdjacentExpressions)
        {
            var ruleLookup = leftAdjacentExpressions.ToDictionary(i => i.Key.Identifier.Name, i => i.Key);
            var mutuallyRecursive = new HashSet<Rule>();

            var index = 0;
            var stack = new Stack<Rule>();
            var ruleData = new Dictionary<Rule, RuleData>();

            Func<Rule, RuleData> strongConnect = null;
            strongConnect = v =>
            {
                var vData = ruleData[v] = new RuleData
                {
                    Index = index,
                    LowLink = index,
                };

                index++;
                stack.Push(v);

                foreach (var w in leftAdjacentExpressions[v]
                                    .OfType<NameExpression>()
                                    .Select(n => n.Identifier.Name)
                                    .Where(n => n != v.Identifier.Name)
                                    .Select(n => ruleLookup[n]))
                {
                    RuleData wData;
                    if (!ruleData.TryGetValue(w, out wData))
                    {
                        wData = strongConnect(w);
                        vData.LowLink = Math.Min(vData.LowLink, wData.LowLink);
                    }
                    else if (stack.Contains(w))
                    {
                        vData.LowLink = Math.Min(vData.LowLink, wData.Index);
                    }
                }

                if (vData.LowLink == vData.Index)
                {
                    var components = new List<Rule>();

                    Rule w;
                    do
                    {
                        w = stack.Pop();
                        components.Add(w);
                    }
                    while (w != v);

                    if (components.Count > 1)
                    {
                        mutuallyRecursive.UnionWith(components);
                    }
                }

                return vData;
            };

            foreach (var v in ruleLookup.Values)
            {
                if (!ruleData.ContainsKey(v))
                {
                    strongConnect(v);
                }
            }

            return mutuallyRecursive;
        }
开发者ID:KevinKelley,项目名称:Pegasus,代码行数:75,代码来源:MutualRecursionDetector.cs

示例2: BuildXml

        public static string BuildXml(IEnumerable<KeyValuePair<string, string>> queries, ILookup<string, KeyValuePair<string, string>> parameters)
        {
            var usedQueryInfos =
                from query in queries
                select new { LocalName = query.Key, QueryInfo = FunctionFacade.GetFunction(query.Value) };

            var paramsDictionary = parameters.ToDictionary(f => f.Key);

            XElement rootElement = new XElement(ui + "treebody");

            foreach (var namedQueryInfo in usedQueryInfos.OrderBy(f => f.QueryInfo.Namespace + f.QueryInfo.Name + f.LocalName))
            {
                IFunction queryInfo = namedQueryInfo.QueryInfo;

                XElement currentNamespaceFolder = rootElement;

                if (string.IsNullOrEmpty(queryInfo.Namespace) == false)
                {
                    string piecemealNamespace = "";

                    foreach (string namespaceSegment in queryInfo.Namespace.Split('.'))
                    {
                        if (string.IsNullOrEmpty(piecemealNamespace) == false) piecemealNamespace = piecemealNamespace + ".";
                        piecemealNamespace = piecemealNamespace + namespaceSegment;

                        XElement existingFolder =
                            (from folderElement in rootElement.Descendants(ui + "treenode")
                             where (string)folderElement.Attribute("binding") == "QueryFolderTreeNodeBinding" && (string)folderElement.Attribute("ElementId") == piecemealNamespace
                             select folderElement).FirstOrDefault();

                        if (existingFolder == null)
                        {
                            XElement subFolder = new XElement(ui + "treenode",
                                                     new XAttribute("binding", "QueryFolderTreeNodeBinding"),
                                                     new XAttribute("ElementId", piecemealNamespace),
                                                     new XAttribute("label", namespaceSegment));
                            currentNamespaceFolder.Add(subFolder);

                            currentNamespaceFolder = subFolder;
                        }
                        else
                        {
                            currentNamespaceFolder = existingFolder;
                        }
                    }
                }

                IGrouping<string, KeyValuePair<string, string>> currentQueryParams;
                bool hasParams = paramsDictionary.TryGetValue(namedQueryInfo.LocalName, out currentQueryParams);

                currentNamespaceFolder.Add(
                    new XElement(ui + "treenode",
                        new XAttribute("binding", "QueryTreeNodeBinding"),
                        new XAttribute("queryname", queryInfo.Name),
                        new XAttribute("localname", namedQueryInfo.LocalName),
                        new XAttribute("ElementId", queryInfo.CompositeName()),
                        from parameter in queryInfo.ParameterProfiles
                        orderby parameter.Name
                        select new XElement(ui + "treenode",
                            new XAttribute("binding", "QueryParamTreeNodeBinding"),
                            new XAttribute("paramname", parameter.Name),
                            new XAttribute("hasvalue", hasParams && currentQueryParams.Count(f => f.Key == parameter.Name) == 1),
                            (hasParams && currentQueryParams.Count(f => f.Key == parameter.Name && f.Value != null) == 1 ? new XAttribute("paramvalue", currentQueryParams.First(f => f.Key == parameter.Name).Value) : null))));
            }

            XmlDocument output = new XmlDocument();
            output.LoadXml(rootElement.ToString());
            XmlNamespaceManager namespaceManager = new XmlNamespaceManager(output.NameTable);
            namespaceManager.AddNamespace("ui", ui.ToString());
            XmlNodeList allNodes = output.SelectNodes("//*");
            foreach (XmlNode node in allNodes)
            {
                node.Prefix = "ui";
            }
            output.DocumentElement.RemoveAttribute("xmlns");
            return IndentedOuterXml(output);
        }
开发者ID:DBailey635,项目名称:C1-CMS,代码行数:77,代码来源:FlowUiQueryMarkupHelper.cs


注:本文中的ILookup.ToDictionary方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。