C# 算法题 求两个List的交集。

Jave.Lin 2010-05-13 09:59:36
class Demo
{
public int Number;
public int Point;

public Demo(int number,int point)
{
Number=number;
Point=point;
}
}

void main()
{
List<Demo> one=new List<Demo>();

for(int i =0;i<75;i++)
{
one.Add(new Demo(i,i*2));
}

List<Demo> two=new List<Demo>();

for(int i =50;i<100;i++)
{
one.Add(new Demo(i,i*2));
}

//从以上Demo可以看出,one的第50~74与two的第50~74之间的数,都为交集。
//如何可以快速,简单易懂,的求出来。
//希望大哥们帮一下,谢谢。
}
...全文
1296 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jave.Lin 2010-05-13
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 sdfkfkd 的回复:]
下面是LINQ的结果

C# code

class Demo
{
public int Number;
public int Point;

public Demo( int number, int point )
{
Number = number;
……
[/Quote]

恩,既然用不上Linq,我还是只是傻的去写循环解决了。

现在解决了,方法:傻傻滴写循环,判断。

可求可重复,的多集合交集了。
特别 2010-05-13
  • 打赏
  • 举报
回复
下面是LINQ的结果

class Demo
{
public int Number;
public int Point;

public Demo( int number, int point )
{
Number = number;
Point = point;
}
}

static void Main( string[] args )
{
List<Demo> one = new List<Demo>();

for ( int i = 0; i < 75; i++ )
{
one.Add( new Demo( i, i * 2 ) );
}

List<Demo> two = new List<Demo>();

for ( int i = 50; i < 100; i++ )
{
two.Add( new Demo( i, i * 2 ) );
}

var s = from o in one
join t in two on new
{
Number = o.Number,
Point = o.Point
} equals
new
{
Number = t.Number,
Point = t.Point
}
select new
{
Number = o.Number,
Point = o.Point
};

foreach ( var item in s )
{
System.Console.WriteLine( string.Format( "Number:{0},Point:{1}", item.Number, item.Point ) );
}
}


楼主要是要非LINQ的,我能想到的就是傻傻地循环了
wuyq11 2010-05-13
  • 打赏
  • 举报
回复
List <T> lst=new List <T>();
foreach(T t in lst)
{
if(!lst.Contains(t))
{
   
}
}

List<String> lstA = new List<string>(new String[] { "1" });
List<String> lstB = new List<string>(new String[] { "2"});
List<String> lstC = new List<string>();
lstC.AddRange(A.FindAll(new Predicate<string>(FindString)));
static bool FindString(String S)
{
return lstB.IndexOf(c) >= 0;
}
Jave.Lin 2010-05-13
  • 打赏
  • 举报
回复
我生成的是.net 2.0版的,太高版的.net没有Linq...要3.0才有.
Jave.Lin 2010-05-13
  • 打赏
  • 举报
回复
以上都是独单的集合里,都没有重复的。

要是每个独单的集合里,又有许多的重复的。

这个时候,求交集,我想更复杂了:

如下:

class Demo
{
public int Number;
public int Point;

public Demo(int number,int point)
{
Number=number;
Point=point;
}
}

void main()
{
List<Demo> one=new List<Demo>();
//添加了0~74的
for(int i =0;i<75;i++)
{
one.Add(new Demo(i,i*2));
}
//这里再给one再添加30~59的
for(int i =30;i<60;i++)
{
one.Add(new Demo(i,i*2));
}

List<Demo> two=new List<Demo>();
//添加了50~99的
for(int i =50;i<100;i++)
{
two.Add(new Demo(i,i*2));//这里更正,不是one,而two
}
//再添加了40~69的
for(int i =40;i<70;i++)
{
two.Add(new Demo(i,i*2));
}

//从以上Demo可以看出,one的第50~74与two的第50~74之间的数,都为交集。
//如何可以快速,简单易懂,的求出来。
//希望大哥们帮一下,谢谢。

//因为每个独单的集合:one,two里,都有可重复的集合,这时会更麻烦

//又如:
//List<int> one = new List<int>(){0,1,2,3,4,5,6,7,8,9,10,2,3,4,5,6,7};
//List<int> two = new List<int>(){5,6,7,8,9,10,11,12,13,14,15,6,7,8,9};
//如以上两个List<int>:one和two,他们要是求交集,我所想要的结果应为:result

//List<int> result = new List<int>{5,6,6,7,7,8,9,10};//因为6和7都分别在one和two都有两次,所以结果一样也有两次。
}
wuyq11 2010-05-13
  • 打赏
  • 举报
回复
LINQ Intersect
IEnumerable<string> lstNew = null;
List<string> lst1 = new List<string>(){"A"};
List<string> lst2= new List<string>() { "B"}
lstNew = lst1.Intersect(lst2, StringComparer.OrdinalIgnoreCase);
jiaowawa136 2010-05-13
  • 打赏
  • 举报
回复
这样就可以了,(循环遍历,如果相等则添加到jiao的list里去)

List<Demo> jiao=new List<Demo>();


for(int i =0;i<one.Count;i++)
{
for(int j=0;j<two.Count;j++){
if(i==j){
jiao.Add(one[i]);

}
}

}
Jave.Lin 2010-05-13
  • 打赏
  • 举报
回复
class Demo
{
public int Number;
public int Point;

public Demo(int number,int point)
{
Number=number;
Point=point;
}
}

void main()
{
List<Demo> one=new List<Demo>();

for(int i =0;i<75;i++)
{
one.Add(new Demo(i,i*2));
}

List<Demo> two=new List<Demo>();

for(int i =50;i<100;i++)
{
two.Add(new Demo(i,i*2));//这里更正,不是one,而two
}

//从以上Demo可以看出,one的第50~74与two的第50~74之间的数,都为交集。
//如何可以快速,简单易懂,的求出来。
//希望大哥们帮一下,谢谢。
}
Jave.Lin 2010-05-13
  • 打赏
  • 举报
回复
以上只是简单情况的例子。

要是复杂的,还没想过。

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧