我正在尝试将AsParallell()AsOrdered()方法一起使用,但始终会看到无序的结果。

using System;
using System.Linq;
using System.Collections.Generic;

namespace Parallel
{
    class MainClass
    {
        public static void Main(string[] args)
        {
            List<String> cities = new List<String>() {
                "Barcelona",
                "Valencia",
                "Sevilla",
                "Zaragoza",
                "Málaga",
                "Murcia",
                "Palma",
                "Las Palmas de Gran Canaria",
                "Alicante",
                "Madrid",
                "Córdoba",
                "Valladolid",
                "Tarrasa",
                "Vigo",
                "Gijón",
                "Cartagena",
                "Hospitalet de Llobregat",
                "Vitoria",
                "La Coruña",
                "Granada",
                "Elche",
                "Oviedo",
                "Badalona"
            };

            var filtered = cities.AsParallel().AsOrdered().Where(c => c.ToUpper().StartsWith("B") || c.ToUpper().EndsWith("A")).ToArray();

            Console.WriteLine("Cities starting with \"B\" or ends with \"A\"");

            foreach (String city in filtered)
            {
                Console.WriteLine(city);
            }

        }
    }
}


输出为:

以“ B”开头或以“ A”结尾的城市
巴塞罗纳
巴伦西亚
塞维利亚
萨拉戈萨
马拉加
穆尔西亚
帕尔玛
大加那利岛拉斯帕尔马斯
科尔多瓦
塔拉萨
卡塔赫纳
维多利亚
拉科鲁尼亚
格拉纳达
巴达洛纳

按任意键继续...


怎么了?

我正在Mac的Net Core项目中使用Visual Studio。

谢谢

最佳答案

AsOrdered()只是保持List<string>中项目的原始顺序。如果要按字母顺序订购商品,可以使用OrderBy方法:

var filtered = cities.AsParallel().Where(c => c.ToUpper().StartsWith("B") || c.ToUpper().EndsWith("A")).OrderBy(x => x).ToArray();

08-05 04:38