使用Linq和List对键值对进行分组
本文关键字:键值对 Linq List 使用 | 更新日期: 2023-09-27 18:00:07
我正在尝试获取一个长的项目列表,一个键/值对,并按键对它们进行分组。这样做,我想得到每个键/值对的计数,这样我以后就可以得到一个加权列表。我生成列表的代码类似于这个示例:
class Notes
{
public int NoteId { get; set; }
public string NoteName { get; set; }
}
class Program
{
static void Main(string[] args)
{
List<Notes> _popularNotes = new List<Notes> {
new Notes { NoteId = 1, NoteName = "Title 1" },
new Notes { NoteId = 1, NoteName = "Title 1" },
new Notes { NoteId = 2, NoteName = "Title 2" },
new Notes { NoteId = 4, NoteName = "Title 4" },
new Notes { NoteId = 4, NoteName = "Title 4" } };
foreach (var _note in _popularNotes)
Console.WriteLine(_note.NoteId + ": " + _note.NoteName);
IEnumerable<IGrouping<int, string>> _query = _popularNotes.GroupBy(x => x.NoteId, x => x.NoteName);
foreach (var _noteGroup in _query)
{
Console.WriteLine(_noteGroup.Key + ": " + _noteGroup.Count());
}
Console.ReadKey();
}
}
这建立了列表并对它们进行分组,我可以获得每个对象的计数,但我无法获得值。我似乎只能拿到钥匙。
我确信有一百万种方法可以做到这一点,我真的在努力选择一种我能理解的方法。我想我只是不明白。
那么,我应该回去通过查找从_popularNotes
列表中获取名称吗?或者,是否有其他方法可以实际构建和输出带有键/值对和计数的列表?
您可以编写_noteGroup.First()
IGrouping<TKey, TElement>
是一个IEnumerable<TElement>
,这意味着您可以对其进行枚举。
根据IGrouping<TKey, TElement>
:文件
public interface IGrouping<out TKey, out TElement> : IEnumerable<TElement>,
IEnumerable
换句话说,要吐出键+计数,然后吐出该组中的所有元素(在您的情况下是名称),您可以执行以下操作:
foreach (var _noteGroup in _query)
{
Console.WriteLine(_noteGroup.Key + ": " + _noteGroup.Count());
foreach (var name in _noteGroup)
Console.WriteLine(" " + name);
}