Aracılığıyla paylaş


Nasıl yapılır: Herhangi bir Sözcük veya Alana Göre Metin Verilerini Sıralama veya Filtreleme (LINQ)

Aşağıdaki örnek, herhangi bir satır alanı virgülle ayrılmış değerler gibi yapısal metin satırlarını sıralamak gösterilmiştir.Bu alan çalışma zamanında dinamik olarak belirtilebilir.Scores.csv alanları dört test puanlarının bir bitlerden Öğrenci kimlik numarasını gösteren varsayalım.

Veri içeren bir dosya oluşturmak için

Örnek

Class SortLines

    Shared Sub Main()
        Dim scores As String() = System.IO.File.ReadAllLines("../../../scores.csv")

        ' Change this to any value from 0 to 4 
        Dim sortField As Integer = 1

        Console.WriteLine("Sorted highest to lowest by field " & sortField)

        ' Demonstrates how to return query from a method. 
        ' The query is executed here. 
        For Each str As String In SortQuery(scores, sortField)
            Console.WriteLine(str)
        Next 

        ' Keep console window open in debug mode.
        Console.WriteLine("Press any key to exit.")
        Console.ReadKey()

    End Sub 

    Shared Function SortQuery(
        ByVal source As IEnumerable(Of String), 
        ByVal num As Integer) As IEnumerable(Of String)

        Dim scoreQuery = From line In source 
                         Let fields = line.Split(New Char() {","}) 
                         Order By fields(num) Descending 
                         Select line

        Return scoreQuery
    End Function 
End Class 
' Output: 
' Sorted highest to lowest by field 1 
' 116, 99, 86, 90, 94 
' 120, 99, 82, 81, 79 
' 111, 97, 92, 81, 60 
' 114, 97, 89, 85, 82 
' 121, 96, 85, 91, 60 
' 122, 94, 92, 91, 91 
' 117, 93, 92, 80, 87 
' 118, 92, 90, 83, 78 
' 113, 88, 94, 65, 91 
' 112, 75, 84, 91, 39 
' 119, 68, 79, 88, 92 
' 115, 35, 72, 91, 70
public class SortLines
{
    static void Main()
    {
        // Create an IEnumerable data source 
        string[] scores = System.IO.File.ReadAllLines(@"../../../scores.csv");

        // Change this to any value from 0 to 4. 
        int sortField = 1;

        Console.WriteLine("Sorted highest to lowest by field [{0}]:", sortField);

        // Demonstrates how to return query from a method. 
        // The query is executed here. 
        foreach (string str in RunQuery(scores, sortField))
        {
            Console.WriteLine(str);
        }

        // Keep the console window open in debug mode.
        Console.WriteLine("Press any key to exit");
        Console.ReadKey();
    }

    // Returns the query variable, not query results! 
    static IEnumerable<string> RunQuery(IEnumerable<string> source, int num)
    {
        // Split the string and sort on field[num] 
        var scoreQuery = from line in source
                         let fields = line.Split(',')
                         orderby fields[num] descending 
                         select line;

        return scoreQuery;
    }
}
/* Output (if sortField == 1):
   Sorted highest to lowest by field [1]:
    116, 99, 86, 90, 94
    120, 99, 82, 81, 79
    111, 97, 92, 81, 60
    114, 97, 89, 85, 82
    121, 96, 85, 91, 60
    122, 94, 92, 91, 91
    117, 93, 92, 80, 87
    118, 92, 90, 83, 78
    113, 88, 94, 65, 91
    112, 75, 84, 91, 39
    119, 68, 79, 88, 92
    115, 35, 72, 91, 70
 */

Bu örnek ayrıca bir sorgu değişkeni bir işlev (Visual Basic) ya da yöntemi (C#) dönmek gösterilmiştir.

Kod Derleniyor

  • Oluşturma bir Visual Studio hedefleyen proje .NET Framework sürüm 3.5.Varsayılan olarak, proje başvuru System.Core.dll sahiptir ve bir using yönergesi (C#) veya Imports deyimi (Visual Basic) System.Linq ad alanı.C# projeleri, ekleme bir using yönergesi System.IO ad alanı.

  • Projenize bu kodu kopyalayın.

  • Derlemek ve program çalıştırmak için F5 tuşuna basın.

  • Konsol penceresine çıkmak için herhangi bir tuşa basın.

Ayrıca bkz.

Kavramlar

LINQ ve Dizeler