看板 C_Sharp 關於我們 聯絡資訊
※ 引述《AmosYang (LetMeGoogleThatForYou)》之銘言: : 如果要「找出所有 age 為 max age 的 customer」 : 還是先跑一次 .Max() 再 select 吧 :p : 硬擠成一行或許辦得到,但大概會寫得很噁心 XD OK 我嚐試的結果如下 (回您信箱之後又作一些簡化) class Customer { public string Name; public int Age; } private void button1_Click(object sender, EventArgs e) { Customer[] customers = new Customer[] { new Customer { Name = "Alice", Age = 30 }, new Customer { Name = "Bob", Age = 35 }, new Customer { Name = "Clair", Age = 25 }, new Customer { Name = "Darren", Age = 35 } }; var oldest = customers.Aggregate(new List<Customer>(), (list, c) => { if(list.Count < 1 || c.Age > list[0].Age) return new List<Customer> { c }; if(c.Age == list[0].Age) list.Add(c); return list; }); foreach(Customer c in oldest) MessageBox.Show(string.Format("{0} {1}", c.Age, c.Name)); } 謝謝您的幫助 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.41.97
AmosYang:要練 Linq 的話,可以把 .Count < 1 換成 !Any() 07/06 01:13
AmosYang:list[0] 換成 list.First() 07/06 01:15
AmosYang:底下的 foreach 可以換成 List.ForEach XD 07/06 01:16
sidetalker:我有測過耶,list[n]的O(1)換成ElementAt(n)就變成O(n) 07/06 02:30
sidetalker:!Any()則當然是O(n),使得我得了IEnumerable函數恐懼症 07/06 02:31
sidetalker:能用List原生函數的我就儘量不轉成IEnumerable函數 07/06 02:32
AmosYang:根據我自己的測試,光只是 "Any()" 的話,應該是 O(1) 07/06 08:31
AmosYang:Linq 新鮮有趣,但若要寫得好讀且有效率…需要練習 :D 07/06 08:33