C # / Linq: Áp dụng một hàm ánh xạ cho từng phần tử trong IEnumerable?


107

Tôi đã tìm cách chuyển đổi từng phần tử của IEnumerable thành thứ khác bằng cách sử dụng hàm ánh xạ (theo cách tương thích với Linq) nhưng tôi không tìm thấy gì cả.

Đối với một ví dụ (rất đơn giản), nó sẽ có thể làm điều gì đó như

IEnumerable<int> integers = new List<int>() { 1, 2, 3, 4, 5 };
IEnumerable<string> strings = integers.Transform(i => i.ToString());

Nhưng tôi không tìm thấy gì cả. Ý tôi là, khá đơn giản khi viết một phương thức mở rộng để thực hiện điều đó (về cơ bản, tất cả những gì nó yêu cầu là gói bộ liệt kê nguồn vào một lớp mới và sau đó viết một chút mã soạn sẵn để ủy quyền các lệnh gọi đến nó), nhưng tôi đã mong đợi đây là một hoạt động khá cơ bản và bản thân viết nó giống như đang phát minh lại bánh xe - tôi không thể rung động cảm giác rằng có thể có một cách tích hợp mà tôi nên sử dụng và tôi quá mù quáng để nhìn thấy nó.

Vậy ... có điều gì đó trong Linq cho phép tôi làm những gì tôi đã mô tả ở trên không?


Câu trả lời:


172

Bạn chỉ có thể sử dụng Select()phương pháp mở rộng:

IEnumerable<int> integers = new List<int>() { 1, 2, 3, 4, 5 };
IEnumerable<string> strings = integers.Select(i => i.ToString());

Hoặc theo cú pháp LINQ:

IEnumerable<int> integers = new List<int>() { 1, 2, 3, 4, 5 };

var strings = from i in integers
              select i.ToString();

4
Ah! Tôi biết phải có một cách. Một chút cũ "Rừng / Trees trực quan Occlusion vấn đề", tôi đoán :)
Andreas Baus

2
Lưu ý rằng nếu bản đồ của bạn có tác dụng phụ, bạn có thể gặp rắc rối vì phần thân của bản đồ Select()sẽ không nhất thiết phải được thực thi cho đến khi nó được liệt kê. Không phải là một ý tưởng tuyệt vời để làm điều đó, nhưng có thể có một số tình huống mà bạn có thể cần thêm ToList()để buộc nó đánh giá toàn bộ danh sách.
Dave Nichol

6
Gọi một dạng là "cú pháp truy vấn linq" và dạng khác là "cú pháp phương thức linq" có đúng hơn không?
Ryan Harmuth

2
Thực ra cả hai đều là kiểu cú pháp Linq, kiểu đầu tiên được gọi là Cú pháp phương thức và kiểu thứ hai được gọi là Cú pháp truy vấn. Đọc thêm: docs.microsoft.com/en-us/dotnet/csharp/programming-guide/…
Machado

27

Bạn đang tìm Selectthứ có thể được sử dụng để biến đổi \ chiếu chuỗi đầu vào:

IEnumerable<string> strings = integers.Select(i => i.ToString());

9
Để công bằng đó là nghĩa vụ để phù hợp với SQL (nơi tập thứ hai của điều khoản này là thuật ngữ phổ biến)
éclairevoyant

5
Nó khá khó chịu. Tôi đang cố gắng học lập trình chức năng ... nhưng phải mất 10 năm học các thuật ngữ LINQ. Tôi cần một hướng dẫn dịch thuật. Tôi tự hỏi của Google dịch có thể giúp ...
Damien Sawyer
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.