从用户输入句子,按字母顺序确定并显示非重复单词

时间:2011-04-04 04:33:48

标签: c# linq var

官方问题:编写一个控制台应用程序,用于输入用户的句子(假设没有标点符号),然后按字母顺序确定并显示非重复的单词。将大写和小写字母视为相同。 [提示:您可以使用字符串方法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);
            }
        }

我不知道如何找到重复项并删除它们。

3 个答案:

答案 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)

排序后,浏览列表,并将每个单词与之前的单词进行比较。如果匹配,请删除该单词。由于列表已排序,因此所有重复项必须相邻。