C # / Linq: Bir IEnumerable'daki her öğeye bir eşleme işlevi uygulayın?


111

IEnumerableBir eşleme işlevi (Linq uyumlu bir şekilde) kullanarak bir öğesinin her bir öğesini başka bir şeye dönüştürmenin bir yolunu arıyordum ama hiçbir şey bulamadım.

(Çok basit) bir örnek için, aşağıdaki gibi bir şey yapabilmelidir:

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

Ama hiçbir şey bulamadım. Demek istediğim, bunu başaran bir uzantı yöntemi yazmak oldukça basittir (temelde tek gereken kaynağı Enumeratoryeni bir sınıfa sarmak ve ardından çağrıları devretmek için biraz standart kod yazmaktır), ancak bunu beklerdim oldukça basit bir işlem olmak ve bunu kendim yazmak tekerleği yeniden icat etmek gibi geliyor - kullanmam gereken yerleşik bir yol olabileceği hissini sallayamıyorum ve bunu göremeyecek kadar kördüm .

Öyleyse ... Linq'te yukarıda anlattıklarımı yapmama izin veren bir şey var mı?


Yanıtlar:


178

Sadece Select()uzantı yöntemini kullanabilirsiniz :

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

Veya LINQ sözdiziminde:

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

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

4
Ah! Bir yolu olması gerektiğini biliyordum. Biraz eski "Orman / Ağaçlar Görsel Tıkanma Sorunu", sanırım :)
Andreas Baus

2
Haritanızın yan etkileri varsa, gövdesi Select()numaralandırılıncaya kadar mutlaka çalıştırılmayacağından başınız belaya girebilir . Bunu yapmak harika bir fikir değil, ancak ToList()tüm listeyi değerlendirmeye zorlamak için eklemeniz gerekebilecek bazı durumlar olabilir .
Dave Nichol

6
Bir biçimi 'linq sorgu sözdizimi' ve diğer biçimi 'linq yöntemi sözdizimi' olarak adlandırmak daha doğru değil mi?
Ryan Harmuth

2
Aslında her ikisi de Linq sözdizimi türleridir, ilki Yöntem sözdizimi ve ikincisi Sorgu sözdizimi olarak adlandırılır. Daha fazlasını okuyun: docs.microsoft.com/en-us/dotnet/csharp/programming-guide/…
Machado

28

SelectGirdi dizisini dönüştürmek \ projelendirmek için hangilerinin kullanılabileceğini arıyorsunuz :

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

9
Adil olmak gerekirse, SQL ile eşleşmesi gerekiyor (burada ikinci terim kümesinin ortak terminoloji olduğu)
éclairevoyant

5
Oldukça can sıkıcı. İşlevsel programlamayı öğrenmeye çalışıyorum ... ama 10 yıllık LINQ terimlerini unutmam gerekiyor. Bir çeviri rehberine ihtiyacım var. Google çevirisinin yardımcı olabileceğini merak ediyorum ...
Damien Sawyer
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.