gpt4 book ai didi

c# - 如何区分不同的值(value)观?

转载 作者:数据小太阳 更新时间:2023-10-29 02:36:32 24 4
gpt4 key购买 nike

我正在尝试构建一个查询来选择唯一的值组。我知道如何对值进行分组并选择不同的值,但我不知道如何选择不同的值组而不考虑所考虑元素的顺序。更准确地说:

我的 XML 是这样的:

<A>
<B type="1">value1</prop>
<B type="2">value2</prop>
<B type="3">value3</prop>
<B type="4">value4</prop>
<C>
<D>XXX</D>
</C>
<C>
<D>YYY</D>
</C>
</A>

<A>
<B type="3">value3</prop>
<B type="4">value4</prop>
<B type="2">value2</prop>
<C>
<D>XXX</D>
</C>
<C>
<D>YYY</D>
</C>
</A>

在这里,我想将 <B> 分组来自所有 <A> 的值节点并仅选择唯一的值集。例如,这里:

值1+值2+值3+值4

值2+值3+值4+值1

只有当某些或所有值不同时,这两组值才应该是唯一的。

非常感谢您的帮助。

最佳答案

以下作品:

var doc = XDocument.Parse(xml);

var comparer = new ElementsComparer();

var result = doc.Descendants("B")
.GroupBy(x => x.Parent)
.Distinct(comparer);

class ElementsComparer : IEqualityComparer<IGrouping<XElement, XElement>>,
IEqualityComparer<XElement>
{
public bool Equals(XElement lhs, XElement rhs)
{
return lhs.Value.Equals(rhs.Value);
}

public bool Equals(IGrouping<XElement, XElement> lhs,
IGrouping<XElement, XElement> rhs)
{
var x = lhs.OrderBy(a => a.Value);
var y = rhs.OrderBy(a => a.Value);
return x.SequenceEqual(y, this);
}

public int GetHashCode(XElement obj)
{
return obj.Value.GetHashCode();
}

public int GetHashCode(IGrouping<XElement, XElement> obj)
{
return 0;
}
}

这将返回不同的组。如果一个组中的元素与另一个组中的元素具有相同的值,则该组被视为与另一个组相同。
不幸的是,我们需要一个完整的 IEqualityComparer 实现来实现这一点。

关于c# - 如何区分不同的值(value)观?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12563147/

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