我如何使用扩展方法或 Linq 来做到这一点?
用我蹩脚的英语解释它有点困难,但我会尝试。
在下面的列表序列中,如果一个项目的第一个字段与另一个项目的第一个字段值具有相同的值,但第二个字段的值不同。因此,我想收集具有相同第一个字段但不具有第二个字段的项目。
它看起来很简单,但我认为并非如此。考虑到您将按照相同的顺序工作,因此有效地完成它很重要。
class MyClass
{
public int first;
public int second;
}
List<MyClass> sequence = new List<MyClass>();
It is a little hard to explain it with my poor english but i will try.
In below list sequence, if a item first field has same value with another item first field value but not same second fields. As result i want to collect items which has same first field but not second fields.
It looks quite easy but i think it is not any.Consider that you will work on same sequence so it is important doing it effectively.
class MyClass
{
public int first;
public int second;
}
List<MyClass> sequence = new List<MyClass>();
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
试试这个:
Try this:
我想你可能想使用 GroupBy。
I'm thinking you might want to use GroupBy.
假设您的 MyClass 对象位于某种集合中,您可以使用 linq 执行类似的操作
。 myList 示例
这表示获取我的列表中的所有对象,其中至少有 2 个对象具有第一个参数(o 和其他一些对象),并且只有一个对象具有第二个参数。
我相信这可以改进。
you could do something like this with linq assuming you
MyClass
objects are in some kind of collectionLet's say a
list<MyClass> myList
for the exampleThis says get all of the objects in my list where there are at least 2 objects that have the first parameter (o and some other object) and only one objects that have the second parameter.
I'm sure this could be improved upon.
我认为您可以通过在
first
字段相等的情况下将序列连接到自身来实现此目的。下面是执行此操作的一些示例代码。输出也如下所示。请注意,此代码会导致找到重复的匹配项,因此您可能必须解决这个问题。该程序的输出如下:
找到第一个:0,x.第二个:10,y.第二个:0,x.ID:1,y.ID:7
找到第一个:1,x.第二个:11,y。第二:20,x.ID:2,y.ID:5
找到第一:2,x.第二:12,y.第二:30,x.ID:3,y.ID:6
找到第一:0,x。第二:10,y.第二:0,x.ID:4,y.ID:7
找到 第一:1,x.第二:20,y.第二:11,x.ID:5,y.ID:2
找到第一个:1,x.第二个:20,y.第二个:11,x.ID:5,y.ID:8
找到第一个:2,x.第二个:30,y.第二个:12,x.ID:6, y.ID:3
找到第一个:2, x.第二:30, y.第二:12, x.ID:6, y.ID:9
找到第一个:0, x.第二:0, y.第二:10, x.ID:7, y.ID:1
找到第一个:0, x.第二:0, y.第二:10, x.ID:7, y.ID:4
找到第一个:1, x.第二:11, y.第二:20, x.ID:8, y.ID:5
找到第一:2, x.第二:12, y.第二:30, x.ID:9, y.ID:6
I think that you could do this by joining the sequence to itself on the condition that the
first
field is equal. Below is some example code that does this. The output is also shown below. Note that this code results in duplicate matches found, so you may have to address that.The output of this program is the following:
Found first:0, x.second:10, y.second:0, x.ID:1, y.ID:7
Found first:1, x.second:11, y.second:20, x.ID:2, y.ID:5
Found first:2, x.second:12, y.second:30, x.ID:3, y.ID:6
Found first:0, x.second:10, y.second:0, x.ID:4, y.ID:7
Found first:1, x.second:20, y.second:11, x.ID:5, y.ID:2
Found first:1, x.second:20, y.second:11, x.ID:5, y.ID:8
Found first:2, x.second:30, y.second:12, x.ID:6, y.ID:3
Found first:2, x.second:30, y.second:12, x.ID:6, y.ID:9
Found first:0, x.second:0, y.second:10, x.ID:7, y.ID:1
Found first:0, x.second:0, y.second:10, x.ID:7, y.ID:4
Found first:1, x.second:11, y.second:20, x.ID:8, y.ID:5
Found first:2, x.second:12, y.second:30, x.ID:9, y.ID:6
这是我想出的:
Here's what I came up with: