首页 文章

Linq问题从列表中排序单词

提问于
浏览
-1

我需要用清单做4件事 .

  • 只对以"A"开头的单词排序

  • 只对以"B"开头的单词排序

  • 只对以"C"开头的单词排序

  • 将所有其他单词排序在一起 .

我按照以下方式做到了 . 但我不知道如何表达自己的其他词需要类似的东西:

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

有什么办法吗?

想象一下,用户输入5个单词:飞机,球,雪茄,梨,厕所,我想用A写的单词:AirPlane,带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

    你可以试试这个:

    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();
    

    EDIT

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

    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开头的单词 .

相关问题