Sdílet prostřednictvím


Postupy: Řazení nebo filtrování textových dat podle libovolného slova či pole (LINQ)

Následující příklad ukazuje způsob třídění řádků strukturovaného textu, například hodnoty oddělené čárkami podle libovolného pole v řádku.Pole může být zadána dynamicky za běhu.Předpokládejme, že pole v scores.csv představují Studentovým identifikační číslo následované série čtyř výsledků testu.

Vytvořit soubor, který obsahuje data

Příklad

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
 */

Tento příklad ukazuje také jak vrátit dotaz proměnné z (Visual Basic) funkci nebo metodu (C#).

Probíhá kompilace kódu

  • Vytvoření Visual Studio projektu, který se zaměřuje .NET Framework verze 3.5.Ve výchozím nastavení projektu odkazuje na System.Core.dll a using směrnice (C#) nebo Imports prohlášení (Visual Basic) pro obor názvů System.Linq.V jazyce C# projekty, přidejte using směrnice pro obor názvů System.IO.

  • Zkopírujte tento kód do projektu.

  • Stisknutím klávesy F5 sestavit a spustit program.

  • Stisknutím libovolné klávesy uzavřete okno konzoly.

Viz také

Koncepty

LINQ a řetězce