【问题标题】:Duplicate items in collection by field flattening通过字段展平收集中的重复项目
【发布时间】:2012-04-27 13:54:36
【问题描述】:

我有一个收藏:
[ A { 'a' => '1', 'b' => ['1', '2']}
B { 'a' => '2', 'b' => ['1','2','3']} ]

我正在寻找一个函数来“复制”此集合中的项目以生成下一个结果:
[ A1 { 'a' => '1', 'b' => '1'}
A2 { 'a' => '1', 'b' => '2'}
B1 { 'a' => '2', 'b' => '1'}
B2 { 'a' => '2', 'b' => '2'}
B3 { 'a' => '2', 'b' => '3'} ]

我怎样才能达到这样的结果?

【问题讨论】:

  • 你能告诉我们 A/B 的类定义(我是指你收藏中的项目)吗?

标签: c# .net linq flatten


【解决方案1】:

您对 A/B 类的定义不是很清楚。我想你的班级看起来像:

class Data
{
    public int a;
    public int[] b;
}

并准备如下数据:

var A = new Data { a = 1, b = new[] { 1, 2, } };
var B = new Data { a = 2, b = new[] { 1, 2, 3 } };
List<Data> original = new List<Data> { A, B };

使用.SelectMany 扁平化数据:

var result = original.SelectMany(item => 
                          item.b.Select(x => 
                             new { a = item.a, b = x }))
                     .ToList();

请忽略代码中的一些不良编程习惯(如公共字段),随意建议最后一个linq查询的编码风格。

【讨论】:

  • SelectMany 绝对可以解决问题。对于我的口味,还有另一个重载看起来更好。SelectMany(x => x.b, (x, b) => new {a = x.a, b = b})
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-04
  • 2019-02-28
  • 1970-01-01
  • 2022-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多