Linq问题,对列表中的单词进行排序

时间:2018-12-08 22:48:15

标签: c# linq sorting

我需要对列表做4件事。

  • 仅对以“ A”开头的单词进行排序
  • 仅对以“ B”开头的单词进行排序
  • 仅对以“ C”开头的单词进行排序
  • 将所有其他单词排序在一起。

我做到了如下。但是我不知道该如何表达自己的意思 需要类似的东西:

where o.ToUpper().StartWith(o!=(A) StartWith(o!=(B) StartWith(o!=(C))

有什么办法吗?

想象一下,用户输入了5个单词:飞机,球,雪茄,梨,马桶,而我想像这样写:A:飞机; B:球; C:雪茄;其他词:梨,马桶

var listA =            
(from a in words
             where a.ToUpper().StartsWith("A")

             select a).ToList();

            foreach (string i in listaA)

            {
                Console.WriteLine(i);
            }

1 个答案:

答案 0 :(得分:0)

您可以尝试以下方法:

var wordsStartingWithA = words.Where(i => i.ToUpper().StartsWith("A")).ToList();
// same for B & C

var otherWords = words.Where(i => !new[] { "A", "B", "C" }.Any(i.ToUpper().StartsWith)).ToList();

编辑

考虑之后,我认为这是一种更清洁的方法:

var wordGroups = words.GroupBy(i => char.ToUpper(i[0])).ToDictionary(i => i.Key, j => j.ToList());

var wordsStartingWithA = wordGroups['A'];
// same for B & C

var otherWords = wordGroups.Where(i => !new[] { 'A', 'B', 'C' }.Any(i.Key.Equals))
                           .SelectMany(i => i.Value).ToList();

通过这种方式,所有单词都根据其首字母进行分组,因此您可以通过执行wordGroups['Z']来获取以 Z 开头的所有单词。