从集合中获取'less common as possible'的数据



从这样的表开始:

| 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的初始要求。"尽可能不常见的值"已成为"最小值"。在这种精确的情况下,两者都匹配,这给人一种错觉,即亚历克斯·阿扎的答案是正确的,但这只是一个巧合。

相关内容

  • 没有找到相关文章

最新更新