分解集合并保存一些字段

本文关键字:字段 保存 集合 合并 分解 | 更新日期: 2023-09-27 18:33:54

我有以下类:

class Item
{
    public string[] field1;
    public int field2;
}

好吧,我收集了物品。如何将这些集合转换为

class Item
{
    public string field1;
    public int field2;
}

我的意思是类似于Items.SelectMany(x => x.field1)但我需要为我的集合的每个元素保存filed2值。

field1:{"asd","asdf","fscsd"}
field2:123
->
field1:{"asd"}
field2:123
field1:{"asdf"}
field2:123
field1:{"fscsd"}
field2:123

分解集合并保存一些字段

试试这个:

var res = Items.SelectMany(x => x.field1.Select(s => new {field1=s, x.field2}));

您将获得一个匿名对象的枚举,每个对象有两个字段 - field1field2

我认为这达到了它的目的:

首先,将类更改为:(两者都是不同的名称)

class Items
{
    public string[] field1;
    public int field2;
}
class Item
{
    public string field1;
    public int field2;
}

然后,此函数会将您的第一类划分为两个(或更多)其他类

public Item[] splitItems(Items item)
{
    Item[] items = new Item[item.field1.length];
    for(int i=0;i<item.field1.length;i++)
    {
        items[i].field1 = item.field1[i];
        items[i].field2 = item.field2;
    }
    return items;
}
Items mainItem = new Items();
mainItem.field1 = {"asd","asdf","fscsd"};
mainItem.field2 = 123;
Item[] tempItems = splitItems(mainItem);

现在你应该看到:

tempItems[0].field1 = "asd";
tempItems[1].field1 = "asdf";
tempItems[2].field1 = "fscsd";

他们所有的字段2将等于123