本文整理汇总了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;
}
示例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);
}