从这样的表开始:
| Code | Year |
---------------
| A01 | 2001 |
| A01 | 2002 |
| B01 | 2002 |
| C01 | 2003 |
我必须到达这个:
| Code | Year |
---------------
| A01 | 2001 |
| B01 | 2002 |
| C01 | 2003 |
我必须对第一列(代码)进行分组,从第二列(年份)开始,我必须获得与所有其他记录相比"尽可能不常见"的数据。我尝试用这个例子来解释这一点:对于代码"A01",我有 2 年:"2001"和"2002"。我必须选择"2001",因为它是其他记录中没有重复出现的那个。如果没有可用值"Year"在其他记录中不重复出现,则最好采用任何值。
数据在内存中以数组的形式存在,为了与它们进行交互,我正在使用一些 LINQ 查询。
提前谢谢你!皮尔吉
抱歉用 C# 制作它。希望您不会有问题将其转换为 VB.NET。
var filteredItems = items
.Select(cod => cod.Code).Distinct()
.Select(cod => items.OrderBy(itm => itm.Year).First(itm => itm.Code == cod))
.ToList();
测试代码:
public class Item
{
public string Code { get; set; }
public string Year { get; set; }
}
public static void Main(string[] args)
{
var items =
new List<Item>
{
new Item{ Code = "A01", Year = "2001" },
new Item{ Code = "A01", Year = "2002" },
new Item{ Code = "B01", Year = "2002" },
new Item{ Code = "C01", Year = "2003" },
};
var filteredItems = items
.Select(cod => cod.Code).Distinct()
.Select(cod => items.OrderBy(itm => itm.Year).First(itm => itm.Code == cod))
.ToList();
}
这是正确的答案(与 Alex Aza 的答案进行比较:filteredItemsAlexAza 和 filteredItemsSsithra 给出了不同的结果,因为不太常见的数据不再是最小数据 - 这里是 2005 年而不是 A001 的 2001 年)
class Program
{
public static void Main(string[] args)
{
var items = new List<Item>
{
new Item { Code = "A01", Year = "2005" },
new Item { Code = "A01", Year = "2002" },
new Item { Code = "B01", Year = "2002" },
new Item { Code = "C01", Year = "2003" },
};
var filteredItemsAlexAza = items.Select(cod => cod.Code).Distinct().Select(cod => items.OrderBy(itm => itm.Year).First(itm => itm.Code == cod)).ToList();
var filteredItemsSsithra = items
.Select(item => new { Item = item, NbItemsWithSameYear = items.Where(i => i.Year == item.Year).Count() })
.GroupBy(ano => ano.Item.Code)
.Select(group => group.OrderBy(ano => ano.NbItemsWithSameYear).First().Item)
.ToList();
}
public class Item
{
public string Code { get; set; }
public string Year { get; set; }
}
}
你可以用你的首选实现语言在谷歌上搜索"相关源代码"。
抱歉,建议的解决方案绝对不能满足Pileggi的初始要求。"尽可能不常见的值"已成为"最小值"。在这种精确的情况下,两者都匹配,这给人一种错觉,即亚历克斯·阿扎的答案是正确的,但这只是一个巧合。