如何遍历string数组并将元素分组存入object数组?
搞定splitWords数组分组:每3个元素合并成object数组的方案
嘿,我来帮你解决这个数组分组的问题!首先我得理清楚你的需求:把那段猜数字代码拆分后的splitWords字符串数组,每3个元素打包成一个元素,最终得到一个有5个元素的object[],但你现在的代码既不运行也没报错,对吧?
先给你一个能跑起来的实现代码
假设你的splitWords是把原代码按空格/符号拆成了单个元素的数组(比如每个单词、括号、运算符都是单独元素),下面是C#的可行实现,还能处理数组长度不是3的倍数的情况,确保最多生成5个元素:
// 这里模拟拆分好的splitWords数组(你可以替换成自己的实际数组) string[] splitWords = { "//", "Write", "your", "main", "here", "Write", "(\"Enter", "a", "number", "between", "1", "&", "10:", "\");", "int", "input", "=", "Convert.ToInt32", "(ReadLine());", "Random", "ranNumberGenerator", "=", "new", "Random();", "int", "randomNumber;", "randomNumber", "=", "ranNumberGenerator.Next", "(1,", "11);", "if", "(input", "==", "randomNumber)", "{", "WriteLine(\"correct\");", "}", "else", "if", "(input", "<", "randomNumber)", "{", "WriteLine(\"too", "low\");", "}", "else", "{", "WriteLine(\"too", "high\");", "}" }; // 初始化目标object数组,最多5个元素(如果原数组元素不够15个,就按实际组数来) object[] result = new object[Math.Min(5, (splitWords.Length + 2) / 3)]; for (int i = 0; i < result.Length; i++) { // 计算当前组的起始和结束位置,避免索引越界 int start = i * 3; int end = Math.Min(start + 3, splitWords.Length); // 把当前组的3个元素合并成一个字符串(你也可以选择存子数组,看需求) string combinedGroup = string.Join(" ", splitWords[start..end]); result[i] = combinedGroup; } // 打印结果看看(可以验证是否生成了5个元素) foreach (var item in result) { Console.WriteLine(item); }
你的代码为啥没反应?大概率是这几个坑
如果你的代码既不运行也没报错,十有八九是踩了这些坑:
- 循环逻辑写错了:比如循环的起始或结束条件不对,导致根本没往目标数组里赋值,甚至循环都没执行
- 目标数组初始化错了:比如把
object[]的长度设成了0,或者设得比实际能生成的组数大很多,结果里面都是空值 - 拆分逻辑有问题:如果
splitWords根本没拆对(比如整个代码是一个元素),那分组操作自然没效果 - 没加验证输出:代码其实跑了,但你没加打印或调试语句,误以为没运行
额外调整:不想合并成字符串?存子数组也行
如果你不想把3个元素合并成字符串,而是直接把每3个元素的子数组存到object[]里,只要改一行代码就行:
// 把合并字符串的代码换成存子数组 result[i] = splitWords[start..end];
内容的提问来源于stack exchange,提问作者ben04rogers
相关产品推荐
相关产品推荐

