如何以交替顺序排列两个不同对象列表的 XMLArray 项目?

安库·古普塔

我有类 Type,它有两个不同对象类型的列表。当我尝试序列化类类型时,我按顺序获取列表,但我想以交替顺序获取项目列表。

public class Type
{
    private List<Slow> slowField;

    private List<Fast> FastField;
    
    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute("SLOW", Order=1)]
    public List<Slow> SLOW
    {
        get
        {
            return this.slowField;
        }
        set
        {
            this.slowField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute("FAST", Order=2)]
    public List<Fast> FAST
    {
        get
        {
            return this.FastField;
        }
        set
        {
            this.FastField = value;
        }
    }
}

电流输出:

<Type>
<SLOW>S1</SLOW>
<SLOW>S2</SLOW>
<SLOW>S3</SLOW>
<FAST>F1</FAST>
<FAST>F2</FAST>
<FAST>F3</FAST>
</Type>

我需要这个输出:

<Type>
<SLOW>S1</SLOW>
<FAST>F1</FAST>
<SLOW>S2</SLOW>
<FAST>F2</FAST>
<SLOW>S3</SLOW>
<FAST>F3</FAST>
</Type>
阿努维斯旺

一种方法是引入第三个集合,它将按所需顺序组合两个现有集合。例如,

假设Fast和Slow的结构如下

public class Fast
{
    public int Value{get;set;}
}

public class Slow
{
    public int Value{get;set;}
}

您现在可以为这两种类型引入基类(或使用 System.Object 作为公共基类)。例如,

public class Base{}

public class Fast:Base
{
    public int Value{get;set;}
}

public class Slow:Base
{
    public int Value{get;set;}
}

现在你可以在你的类型类中添加第三个集合,如下所示

[XmlElement("SLOW", Type = typeof(Slow))]
[XmlElement("FAST", Type = typeof(Fast))]
public List<Base> Complete => GetMergedList();

private List<Base> GetMergedList()
{
  int minLen = Math.Min(SLOW.Count, FAST.Count);

  var list = SLOW.Take(minLen)
            .Zip(FAST.Take(minLen), (a, b) => new Base[] { a, b })
            .SelectMany(array => array)
            .Concat(SLOW.Skip(minLen))
            .Concat(FAST.Skip(minLen));
  return list.ToList();
}

请注意,代码假设 Fast 和 Slow 集合已经单独排序,但如果没有,则需要添加对它们进行排序的逻辑。

您还需要标记现有属性以XmlIgnoreAttribute在序列化期间跳过它们。

[XmlIgnore]
public List<Slow> SLOW
{
....
}

[XmlIgnore]
public List<Fast> SLOW
{
....
}

现在您可以序列化 Type 实例以获得所需的结果。

演示代码

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从xmlArray显示我的图像?

检查两个项目是否在列表中,但不是按固定顺序排列?

如何从项目列表中获得顺序排列?

具有不同类型但元素名称和i:type属性相同的XMLArray

Javascript for / in循环-联接来自两个不同对象的项目?

如何以迭代方式将列表中的项目添加到两个不同的列表中?

如何从两个不同的List对象复制List项目

具有多个名称的XmlArray

重新排列列表中的项目,以使相邻的两个项目都不相同

比较不同列表python中两个元组的项目

如何合并两个不同对象的列表?

如何合并两个不同对象的列表?

如何在Python 3中检查两个不同列表中的相同项目?

如何比较两个 JArray 对象之间的项目并仅在它们不同时调用方法

托管两个不同的项目django

如何合并两个不同的firebase项目?

关联列表中的两个项目

迭代两个列表并组合项目

如何从两个列表中排除非单个项目?

如何从两个列表中找到匹配的部分项目

在mongodb聚合项目阶段如何合并两个对象?

如何以N种方式以等概率排列k个项目

Graphviz:项目不按字母顺序排列

在一个多项目项目中,如何有两个不同的Gradle版本?

如何在元素不按顺序排列的两个不同列上合并两个熊猫数据帧?

如何以不同的顺序打印元组元组中的每个项目

React:Material-UI - 如何设置两个项目列表的样式,使项目彼此相邻?

如何显示列表的两个项目并折叠其他项目?

如何链接两个项目Django