Tag: 递归

如何递归查询Winform的所有Childcontrols?

我使用Windows窗体。 如何以递归方式查询具有特定类型的Form的所有子控件? 在SQL中,您将使用selfjoin来执行此操作。 var result = from this join this ???? where ctrl is TextBox || ctrl is Checkbox select ctrl; 我也可以在LINQ中这样做吗? 编辑: LINQ支持连接。 为什么我不能使用某种自我加入?

如何创建递归函数来复制所有文件和文件夹

我正在尝试创建一个函数,将递归复制源文件夹及其中的所有文件和文件夹到其他位置。 目前,我必须在主文件夹中定义每个文件夹,这使得代码变得臃肿和冗余。 这样做更有效的方法是什么?

通过递归遍历所有属性的属性来比较两个对象?

我已经编写了一个测试方法,用于比较一个类的两个实例(给出了类型兼容性的假设)。 我自豪地检查了所有的公共财产,确保返回一个差异列表。 问题是某些属性是包含自己属性的对象(子属性,如果可以的话)。 通过逐步完成流程,我可以看到这些没有被比较。 如何设计深入调用并比较所有子属性的调用? 如果方法相对简单,则额外奖励。 🙂 public static class Extensions { public static IEnumerable DiffersOn( this Generic self, Generic another) where Generic : class { if (self == null || another == null) yield return null; Type type = typeof(Generic); IEnumerable properties = type.GetProperties( BindingFlags.Public | BindingFlags.Instance); foreach (PropertyInfo property in properties) { var […]

C#中字符串集合的排列

好像我再次陷入递归算法…… 我的应用程序应该根据用户指定的信息并根据由以下字符串表示的子文件夹结构将文件排序到不同的文件夹: [ROOT] \ brand \ color \ material \ 结构字符串中的标记表示集合: 假设: var brand = new List { “Nike”, “Adidas”, “Reebok” }; var color = new List { “red”, “blue”, “yellow”, “black” }; var material = new List { “leather”, “fabric” }; var data = new List<List>() { brand, color, material }; 而我想要得到的是: [ROOT]\Nike\red\leather [ROOT]\Nike\red\fabric […]

C#flattening json结构

我在C#中有一个json对象(表示为Newtonsoft.Json.Linq.JObject对象),我需要将其展平为字典。 让我举例说明我的意思: { “name”: “test”, “father”: { “name”: “test2” “age”: 13, “dog”: { “color”: “brown” } } } 这应该产生一个包含以下键值对的字典: [“name”] == “test”, [“father.name”] == “test2”, [“father.age”] == 13, [“father.dog.color”] == “brown” 我怎样才能做到这一点?

如何防止我的Ackerman函数溢出堆栈?

有没有办法让我的Ackerman函数不会创建一个堆栈而不是流量是相对较小的数字,即(4,2)。 这是错误 {无法计算表达式,因为当前线程处于堆栈溢出状态。} private void Button1Click(object sender, EventArgs e) { var t = Ackermann(4,2); label1.Text += string.Format(“: {0}”, t); label1.Visible = true; } int Ackermann(uint m, uint n) { if (m == 0) return (int) (n+1); if (m > 0 && n == 0) return Ackermann(m – 1, 1); if (m > 0 && n […]

通过递归检查父子关系C#来构建树类型列表

我有一个具有自身列表的类,因此它可以在树结构中表示。 我正在拉这些类的平面列表,并希望解决它。 public class Group { public int ID {get;set;} public int? ParentID {get;set;} public List Children {get;set;} } 我希望能够做到以下几点 List flatList = GetFlatList() //I CAN ALREADY DO THIS List tree = BuildTree(flatList); 如果不明显,则ParentID与其父组的ID属性相关。 编辑 关于为什么我返回列表而不是单个对象存在一些混淆。 我正在构建一个包含项目列表的UI元素,每个元素都有一个孩子。 所以初始列表没有根节点。 到目前为止,似乎所有的解决方案都不起作用。 这意味着我基本上需要使用Group类的树类型结构列表。

获取所有可能的单词组合

我有一个n个单词的列表(比方说26)。 现在我想获得所有可能组合的列表,但每行最多k个单词(假设为5) 所以当我的单词列表是:aaa,bbb,…,zzz我想得到: aaa bbb … aaabbb aaaccc … aaabbbcccdddeeefff aaabbbcccdddeeeggg … 我想让它变量,以便它可以使用任何n或k值。 应该没有两次任何一个词,每个组合都需要采取(即使有很多)。 我怎么能实现这一目标? 编辑: 谢谢您的回答。 这不是一项任务。 只是我忘记了密码的组合,我想确保我已经测试了所有组合。 虽然我没有26个密码部分,但这使我更容易解释我想要的东西。 如果有其他人有同样的问题,这个链接可能会有所帮助: 在c#中生成单词组合数组

使用LINQ进行高效的图遍历 – 消除递归

今天,我将实现一种方法来遍历任意深度的图形并将其展平为单个可枚举的图形。 相反,我先做了一点搜索,发现了这个: public static IEnumerable Traverse(this IEnumerable enumerable, Func<T, IEnumerable> recursivePropertySelector) { foreach (T item in enumerable) { yield return item; IEnumerable seqRecurse = recursivePropertySelector(item); if (seqRecurse == null) continue; foreach (T itemRecurse in Traverse(seqRecurse, recursivePropertySelector)) { yield return itemRecurse; } } } 从理论上讲,这看起来不错,但实际上我发现它比使用等效的手写代码(如果出现的情况)执行图表并做任何需要做的事情要差得多。 我怀疑这是因为在这种方法中,对于它返回的每个项目,堆栈必须放松到某个任意深度的水平。 我还怀疑如果递归被消除,这种方法会更有效地运行。 我也碰巧不太擅长消除递归。 有谁知道如何重写这种方法来消除递归? 谢谢你的帮助。 编辑:非常感谢所有详细的回复。 我已尝试对原始解决方案与Eric的解决方案进行基准测试,而不是使用枚举器方法,而是递归遍历一个lambda,奇怪的是,lambda递归明显快于其他两种方法。 class Node { public […]

在C#中递归复制内容的最佳方法是什么?

使用C#和ASP.NET以递归方式将文件夹的内容复制到另一个文件夹的最佳方法是什么?