2017-02-12 17 views
2

私はAsOrdered()メソッドでAsParallell()を使用しようとしていますが、常に順序付けられていない結果が表示されます。AsOrdered()not working

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

     } 
    } 
} 

出力は次のようになります。

 
Cities starting with "B" or ends with "A" 
Barcelona 
Valencia 
Sevilla 
Zaragoza 
Málaga 
Murcia 
Palma 
Las Palmas de Gran Canaria 
Córdoba 
Tarrasa 
Cartagena 
Vitoria 
La Coruña 
Granada 
Badalona 

Press any key to continue... 

いただきましたの?

私はMac、Net CoreプロジェクトでVisual Studioを使用しています。

おかげ

+0

はほぼ正しい、常に_expected_結果だけでなく、実際に提供します。あなたがアイテムを注文したい場合は、アルファベット順に、あなたはOrderByメソッドを使用することができます。 –

答えて

1

AsOrdered()オリジナルの注文はList<string>のままです。

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

AsOrderedは、それはあなたのコレクションを並べ替えるという意味ではありません。 AsOrderedは、それがpreserve既存の注文を意味することを意味します。あなたのコレクションは最初に順序付けされていないので、結果も順不同です。

あなたは、並列クエリの前に

cities.Sort(); 

を行います場合は - あなたの結果が発注されます。あなたがこれを行うがを削除する場合、AsParallelを削除します - あなたの結果は発注される保証はありません。