如何从字符串数组筛选字母有序单词并添加至List集合?
问题:筛选字母按顺序排列的单词
给定条件
- 目标字符串数组:
string[] words = new string[5] { "abbey","billowy", "chills","abced","abcde" };
- 期望输出结果:
abbey billowy chills abcde
错误实现代码
以下代码无法得到正确结果:
List<string> AlphabeticOrder = new List<string>(); foreach (var word in words) { for (int i = 1; i < word.Length; i++) { if (word[i] < word[i - 1]) { break; } AlphabeticOrder.Add(word); break; } }
问题分析
原代码的核心错误是:仅检查到第一组相邻字符符合升序,就直接将单词加入列表并终止检查,没有验证所有相邻字符是否都满足非降序要求。比如abced的前几组字符符合升序,但最后一组d < e,原代码会错误将其加入列表,不符合需求。
正确实现方法
方法1:逐字符全量检查
List<string> AlphabeticOrder = new List<string>(); foreach (var word in words) { bool isOrdered = true; // 遍历所有相邻字符对 for (int i = 1; i < word.Length; i++) { if (word[i] < word[i - 1]) { isOrdered = false; break; } } // 确认所有字符都符合顺序后再加入列表 if (isOrdered) { AlphabeticOrder.Add(word); } } // 输出结果:string.Join(" ", AlphabeticOrder) → "abbey billowy chills abcde"
方法2:LINQ简化实现
如果熟悉LINQ,可以用更简洁的写法,逻辑是将单词字符排序后与原单词对比,完全一致则说明原单词是按字母顺序排列的:
using System.Linq; List<string> AlphabeticOrder = words.Where(word => word.SequenceEqual(word.OrderBy(c => c)) ).ToList();
内容的提问来源于stack exchange,提问作者Mia
相关产品推荐
相关产品推荐

