gpt4 book ai didi

c# - 在捕获索引时使用 LINQ 展平列表

转载 作者:行者123 更新时间:2023-11-30 17:14:42 25 4
gpt4 key购买 nike

我有一个 List<List<List<Foo>>>我想将其展平为 List<new {Foo, Ndx}>其中 Ndx 是最外层列表的索引。例如,如果我有类似的东西:

new List(){
new List(){
new List(){ new Foo("a"), new Foo("b")},
new List(){ new Foo("c")}},
new List(){
new List(){ new Foo("x"), new Foo("y")}}}

“a”、“b”和“c”的 Ndx 最终可能为 0,“x”和“y”的 Ndx 最终可能为 1。有人有 LINQ 解决方案吗?

最佳答案

有点繁琐,但你可以这样做:

IEnumerable<Tuple<Foo,int>> result =
tree.SelectMany(
(L1,i) => L1.SelectMany(
L2 => L2.Select(
k => Tuple.Create(k,i)
)
)
);

可编译的版本是:

using System;
using System.Collections.Generic;
using System.Linq;

class Foo
{
public string s;

public Foo(string s)
{
this.s = s;
}
}

class Program
{
static void Main(string[] args)
{
var tree = new List<List<List<Foo>>>
{
new List<List<Foo>>
{
new List<Foo> { new Foo("a"), new Foo("b") },
new List<Foo> { new Foo("c") }
},
new List<List<Foo>>
{
new List<Foo> { new Foo("x"), new Foo("y") }
}
};

IEnumerable<Tuple<Foo,int>> result = tree.SelectMany((L1,i) => L1.SelectMany(L2 => L2.Select(k => Tuple.Create(k,i))));
foreach(var si in result)
{
Console.WriteLine(si.Item1.s + ' ' + si.Item2);
}
}
}

编辑:正如@sll 指出的那样,由于使用了 Tuple,此解决方案需要 .NET 4。如果有必要,适应起来并不难。

关于c# - 在捕获索引时使用 LINQ 展平列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8495329/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com