2013-01-16 143 views
0
private void button1_Click(object sender, EventArgs e) 
{ 
    string[] array1 = { "C:/folder/a.txt", "C:/folder/b.txt", "C:/folder/c.txt", "C:/folder/d.txt" }; 

    string[] array2 = { "D:/a.txt", "D:/b.txt", "D:/c.txt", "D:/d.txt" }; 

    var hash1 = new HashSet<string>(array1); 

    var hash2 = new HashSet<string>(array2); 

} 

我想比较hash1hash2。如果a.txt文件存在于hash2上,则从hash1删除C:/folder/a.txt。我们可以做到这一点没有迭代值?如何比较两个HashSet?

回答

1

如果我没看错的话应该是这样的:

var result = array1.Where(a1 => //take only those items from array1, which 
       !array2.Any( //have no such item in array2 
       a2 => a2.Contains( //that contains 
        a1.Substring(a1.LastIndexOf("/"))))); //a similar filename 

var hash1 = new HashSet<string>(result); 
var hash2 = new HashSet<string>(array2); 

也就是说,这将是足以创造HashSet与已必要的值。所以所有的计算都是通过数组完成的。

+0

谢谢..其工作..干得好.. –