我试图将两个列表与Linq或lambda表达式进行比较。我不想使用任何类型的循环。
如果我有两个整数列表类型,我会使用这个表达式
示例1
List<int> tlistA = new List<int>();
tlistA.AddRange(new int[] { 1, 2, 3, 4, 5 });
List<int> tlistB = new List<int>();
tlistB.AddRange(new int[] { 3, 5, 6, 7, 8 });
Console.WriteLine((from tla in tlistA
where tlistB.Contains(tla)
select tla).Any());
但是,如果我同时拥有列表类型的对象,我会使用这个表达式
示例2
class la{public int v { get; set; }}
class lb{public int v { get; set; }}
static void Main(string[] args)
{
List<la> listA = new List<la>
{
new la() { v = 1 },
new la() { v = 2 },
new la() { v = 3 },
new la() { v = 4 },
new la() { v = 5 },
};
List<lb> listB = new List<lb>
{
new lb() { v = 3 },
new lb() { v = 5 },
new lb() { v = 6 },
new lb() { v = 7 },
new lb() { v = 8 },
};
Console.WriteLine(listB
.Where(b =>
listA
.Any(a => a.v == b.v))
.Any());
}
但是,我的问题是如何将整数的列表类型与具有整数属性的另一个列表类型的对象进行比较。
让我的问题清楚地理解&#34;我如何将示例1中的tlistA与示例2中的listB进行比较?&#34;
非常感谢
答案 0 :(得分:3)
最有效的方法不是 public void run() {
byte[] buffer; // buffer store for the stream
int bytes; // bytes returned from read()
// Keep listening to the InputStream until an exception occurs
while (true) {
try {
buffer = new byte[1024];
// Read from the InputStream
bytes = inStream.read(buffer);
status.post(new Runnable() {
public void run() {
status.setText("Receiving "+progress+ " / "+total);
}
});
// Send the obtained bytes to the UI activity
mHandler.obtainMessage(Constants.MESSAGE_READ, bytes, -1, buffer)
.sendToTarget();
} catch (IOException e) {
break;
}
}
}
private static Handler mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch(msg.what){
case Constants.MESSAGE_READ:
byte[] readBuf = (byte[])msg.obj;
String string = new String(readBuf);
received.add(string);
if(progress < 1) {
total = 100;
}
progress++;
if(progress == 15) {
for(int i = 0; i < received.size(); i++) {
System.out.println(received.get(i));
}
}
break;
}
}
};
+ Where
+ Contains
,而是Any
+ Intersect
:
Any
关键是您已从对象中选择bool intsContainV = tlistA.Intersect(listB.Select(b => b.v)).Any();
属性以在int
中使用它。
所以你也可以使用你的(慢)Intersect
- Where
- 方法:
Contains
或更短:
bool intsContainV = tlistA
.Where(i => listB.Select(b => b.v).Contains(i))
.Any();
答案 1 :(得分:1)
absolute
或
position: fixed
实质上,您需要将tlistA.Where(x => listB.Select(y => y.v).Contains(x)).Any();
转换为整数列表,并由此完成
tListA.Intersect(listB.Select(y => y.v)).Any();
一旦它是一个整数列表,你可以通过你想要的任何方法自由地比较你的整数列表。
答案 2 :(得分:0)
listA.Where(lstA => listB.Any(lstB.Contains(lstA)))