首页 / C# / c# – 计算一组n个连续集合
c# – 计算一组n个连续集合
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 计算一组n个连续集合,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3004字,纯文字阅读大概需要5分钟。
内容图文
![c# – 计算一组n个连续集合](/upload/InfoBanner/zyjiaocheng/825/b438b32ecb85416bb867895959c0d74f.jpg)
好吧 – 我甚至不确定这个词是否正确 – 而且我确信这个词肯定会有 – 但我会尽力解释.这不是一个十字架产品,结果的顺序绝对至关重要.
鉴于:
IEnumerable<IEnumerable<string>> sets =
new[] {
/* a */ new[] { "a", "b", "c" },
/* b */ new[] { "1", "2", "3" },
/* c */ new[] { "x", "y", "z" }
};
其中每个内部可枚举表示生成一组连接的指令,如下所示(此处的顺序很重要):
set a* = new string[] { "abc", "ab", "a" };
set b* = new string[] { "123", "12", "1" };
set c* = new string[] { "xyz", "xy", "x" };
我想生成有序连接,如下所示:
set final = new string { a*[0] + b*[0] + c*[0], /* abc123xyz */
a*[0] + b*[0] + c*[1], /* abc123xy */
a*[0] + b*[0] + c*[2], /* abc123x */
a*[0] + b*[0], /* abc123 */
a*[0] + b*[1] + c*[0], /* abc12xyz */
a*[0] + b*[1] + c*[1], /* abc12xy */
a*[0] + b*[1] + c*[2], /* abc12x */
a*[0] + b*[1], /* abc12 */
a*[0] + b*[2] + c*[0], /* abc1xyz */
a*[0] + b*[2] + c*[1], /* abc1xy */
a*[0] + b*[2] + c*[2], /* abc1x */
a*[0] + b*[2], /* abc1 */
a*[0], /* abc */
a*[1] + b*[0] + c*[0], /* ab123xyz */
/* and so on for a*[1] */
/* ... */
a*[2] + b*[0] + c*[0], /* a123xyz */
/* and so on for a*[2] */
/* ... */
/* now lop off a[*] and start with b + c */
b*[0] + c*[0], /* 123xyz */
/* rest of the combinations of b + c
with b on its own as well */
/* then finally */
c[0],
c[1],
c[2]};
很明显,会有很多组合!
我可以看到与数字基础的相似性(因为顺序也很重要),我确信这里也存在潜伏/组合.
问题是 – 如何编写这样的算法来处理任意数量的字符串集? Linq,非Linq;我没有被打扰.
我为什么要这样做?
的确,为什么!?
在Asp.Net MVC中 – 我希望部分视图可以针对给定的后端/前端文化和语言组合进行重新定义.其中最基本的是,对于给定的基本视图View,我们可以按优先顺序查看View-en-GB,View-en,View-GB和View(当然要认识到语言/文化代码可能是相同的,所以一些组合可能是相同的 – 一个Distinct()将解决这个问题.
但是我还有其他观点,在文化被考虑之前,它们本身还有其他可能的组合(太长时间不能进入 – 但事实是,这个算法将使我想要提供的一大堆非常酷开发商!).
我想生成一个包含所有可接受视图名称的搜索列表,遍历整个批次,直到找到最具体的匹配(由此算法将产生这些连接的顺序控制),然后提供已解析的部分视图.
稍后可以缓存搜索的结果,以避免一直运行算法的费用.
我已经有一个非常基本的工作版本,只有一个可枚举的字符串.但这是一个完全不同的海鲜水壶!
任何帮助非常感谢.
解决方法:
这是我的尝试:
void Main()
{
IEnumerable<IEnumerable<string>> sets =
new[] {
/* a */ new[] { "a", "b", "c" },
/* b */ new[] { "1", "2", "3" },
/* c */ new[] { "x", "y", "z" }
};
var setCombinations = from set in sets
select (from itemLength in Enumerable.Range(1, set.Count()).Reverse()
select string.Concat(set.Take(itemLength).ToArray()));
IEnumerable<string> result = new[] { string.Empty };
foreach (var list in setCombinations) {
result = GetCombinations(result, list);
}
// do something with the result
}
IEnumerable<string> GetCombinations(IEnumerable<string> root, IEnumerable<string> append) {
return from baseString in root
from combination in ((from str in append select baseString + str).Concat(new [] { baseString }))
select combination;
}
内容总结
以上是互联网集市为您收集整理的c# – 计算一组n个连续集合全部内容,希望文章能够帮你解决c# – 计算一组n个连续集合所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。