Aracılığıyla paylaş


Nasıl yapılır: bir dize (LINQ) bir sözcük oluşumlarını sayma

Bu örnek, nasıl kullanılacağını gösterir bir LINQ sorgu dizesinde belirtilen bir sözcüğün kaç kez yinelendiğini saymak için.İlk sayımı gerçekleştirmek için dikkat Split sözcüklerden oluşan bir dizi oluşturma yöntemi çağrılır.Bir performans maliyeti var. Split yöntemi. Yalnızca dize işlemi sözcükleri saymak için kullanmayı düşünmelisiniz Matches veya IndexOf yöntemleri yerine.Ancak, performans kritik sorun değil veya diğer sorgu türleri üzerinde gerçekleştirmek için cümle zaten böldüyseniz, sonra onu kullanmak için anlamlı LINQ sözcükleri veya tümcecikleri de saymak için.

Örnek

Class CountWords

    Shared Sub Main()

        Dim text As String = "Historically, the world of data and the world of objects" & 
                  " have not been well integrated. Programmers work in C# or Visual Basic" & 
                  " and also in SQL or XQuery. On the one side are concepts such as classes," & 
                  " objects, fields, inheritance, and .NET Framework APIs. On the other side" & 
                  " are tables, columns, rows, nodes, and separate languages for dealing with" & 
                  " them. Data types often require translation between the two worlds; there are" & 
                  " different standard functions. Because the object world has no notion of query, a" & 
                  " query can only be represented as a string without compile-time type checking or" & 
                  " IntelliSense support in the IDE. Transferring data from SQL tables or XML trees to" & 
                  " objects in memory is often tedious and error-prone."

        Dim searchTerm As String = "data"

        ' Convert the string into an array of words.
        Dim dataSource As String() = text.Split(New Char() {" ", ",", ".", ";", ":"}, 
                                                 StringSplitOptions.RemoveEmptyEntries)

        ' Create and execute the query. It executes immediately 
        ' because a singleton value is produced.
        ' Use ToLower to match "data" and "Data" 
        Dim matchQuery = From word In dataSource 
                      Where word.ToLowerInvariant() = searchTerm.ToLowerInvariant() 
                      Select word

        ' Count the matches.
        Dim count As Integer = matchQuery.Count()
        Console.WriteLine(count & " occurrence(s) of the search term """ & 
                          searchTerm & """ were found.")

        ' Keep console window open in debug mode.
        Console.WriteLine("Press any key to exit.")
        Console.ReadKey()
    End Sub
End Class
' Output:
' 3 occurrence(s) of the search term "data" were found.
class CountWords
{
    static void Main()
    {
        string text = @"Historically, the world of data and the world of objects" +
          @" have not been well integrated. Programmers work in C# or Visual Basic" +
          @" and also in SQL or XQuery. On the one side are concepts such as classes," +
          @" objects, fields, inheritance, and .NET Framework APIs. On the other side" +
          @" are tables, columns, rows, nodes, and separate languages for dealing with" +
          @" them. Data types often require translation between the two worlds; there are" +
          @" different standard functions. Because the object world has no notion of query, a" +
          @" query can only be represented as a string without compile-time type checking or" +
          @" IntelliSense support in the IDE. Transferring data from SQL tables or XML trees to" +
          @" objects in memory is often tedious and error-prone.";

        string searchTerm = "data";

        //Convert the string into an array of words
        string[] source = text.Split(new char[] { '.', '?', '!', ' ', ';', ':', ',' }, StringSplitOptions.RemoveEmptyEntries);

        // Create and execute the query. It executes immediately 
        // because a singleton value is produced.
        // Use ToLowerInvariant to match "data" and "Data" 
        var matchQuery = from word in source
                         where word.ToLowerInvariant() == searchTerm.ToLowerInvariant()
                         select word;

        // Count the matches.
        int wordCount = matchQuery.Count();
        Console.WriteLine("{0} occurrences(s) of the search term \"{1}\" were found.", wordCount, searchTerm);

        // Keep console window open in debug mode
        Console.WriteLine("Press any key to exit");
        Console.ReadKey();
    }
}
/* Output:
   3 occurrences(s) of the search term "data" were found.
*/

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 dizeleri