官方问题:编写一个控制台应用程序,用于输入用户的句子(假设没有标点符号),然后按字母顺序确定并显示非重复的单词。将大写和小写字母视为相同。 [提示:您可以使用字符串方法Split而不使用参数,如在句子.Split()中,将句子分成包含单个单词的字符串数组。默认情况下,Split使用空格作为分隔符。在LINQ查询的select和orderby子句中使用字符串方法ToLower来获取每个单词的小写版本。]
这是我到目前为止所做的:
static void Main(string[] args)
{ // Creates list of type string
List<string> list = new List<string>();
// Writes for sentence
Console.Write("Enter your sentence. No punctuation. : ");
// Converts console into string
string sent = (Console.ReadLine());
// Splits string into array
string[] words = sent.Split();
// Writes array to list
for (int i = 0; i < words.Length; i++)
{
list.Add(words[i]);
}
// Sorts words
var sort =
from word in list
let lowerWord = word.ToLower()
orderby lowerWord
select lowerWord;
// I assume a var query goes here to delete dup words
// Writes words
foreach (string c in sort)
{
Console.WriteLine(c);
}
}
我不知道如何找到重复项并删除它们。
答案 0 :(得分:2)
会
var unique = sort.Distinct();
为你工作?
答案 1 :(得分:1)
public static IEnumerable<string> GetAlphabetizedUniqueWords(string sentence)
{
return (sentence ?? string.Empty)
.Split()
.Select(x => x.ToLowerInvariant())
.Distinct()
.OrderBy(x => x);
}
static void Main( )
{
Console.Write("Enter your sentence. No punctuation. : ");
foreach (var word in GetAlphabetizedUniqueWords(Console.ReadLine()))
Console.WriteLine(word);
}
答案 2 :(得分:1)
排序后,浏览列表,并将每个单词与之前的单词进行比较。如果匹配,请删除该单词。由于列表已排序,因此所有重复项必须相邻。