使用Linq比较2个列表中的字符串

时间:2013-07-30 08:08:28

标签: c# linq list

我需要将列表与字符串进行比较,并找到相似的whitch元素。即

List<string> listA = {"ProfileHeight", "ProfileWidth", "WebThickness"}
List<string> listB ={"ProfileHeightVisibility", "ProfileWidthVisibility", "WebThicknessVisibility", "FlangeThicknessVisibility", "DepthVisibility"}

我想知道是否可以使用Linq。我希望结果是一个列表,列表中的元素名称类似于listA中的字符串。 statemant即“ProfileHeightVisibility.Contains(”ProfileHeight“)= true

5 个答案:

答案 0 :(得分:17)

您的意思是您希望listB where中的项目包含listA中元素的any吗?

listB.Where(b => listA.Any(a => b.Contains(a))

答案 1 :(得分:5)

您可以在LINQ中执行此操作:

listB.Where(e => listA.Any(a => e.Contains(a)));

请记住,此算法的运行时成本与 O(n ^ 2)类似,因此随着列表中元素数量的增加,它会快速减速。

答案 2 :(得分:1)

你也可以实现这样的目标:

  public class EqualityComparer : IEqualityComparer<string>
  {

    public bool Equals(string x, string y)
    {
      return y.Contains(x);
    }

    public int GetHashCode(string obj)
    {
      return 1;
    }
   }

然后使用相交:

 listB.Intersect(listA, new EqualityComparer()).ToList();

答案 3 :(得分:0)

是的,你可以用LINQ

做这件事
    public List<string> GetSimilarStrings(List<string> list1, List<string> list2)
    {
        return (from item in list1 from item2 in list2 where string.Equals(item,item2,StringComparison.InvariantCultureIgnoreCase) select item).ToList();
    }

答案 4 :(得分:0)

BufferedImage[] input = new BufferedImage[count-1];
//Load each input image.
for(int index=0; index<input.length; index++) {
try {
     File f = new File("folder_path\\"+img_"+ 
(index+1)+".tiff");
     input[index] = ImageIO.read(f);
     }
catch(Exception e) {
          e.printStackTrace();
      }
  }

  int offset  = 5, width=0, height=input[0].getHeight();
  for(int index=0; index<input.length; index++) {
        width+=input[index].getWidth();
        if(height<input[index].getHeight())
        {
            height=input[index].getHeight();
        }
  }
  width+=count*offset;
  height+=offset;

  //Create Output image
  BufferedImage output = new BufferedImage(width,height,BufferedImage.TYPE_INT_ARGB);
  Graphics2D g2 = output.createGraphics();
  Color oldColor = g2.getColor();

//fill background
  g2.setPaint(Color.WHITE);
  g2.fillRect(0, 0, width, height);

//draw image
  g2.setColor(oldColor);
  int xcordinate=0;
  for(int index=0; index<input.length; index++) {
      g2.drawImage(input[index], null, xcordinate, 0);
      xcordinate+=input[index].getWidth()+offset;
  }
  g2.dispose();
  File merged = new File("folder_path\\"+merged_2_new.tiff");
  try {
      ImageIO.write(output, "tiff", merged);
  }
  catch(Exception e) {
      e.printStackTrace();
  }

匹配结果将为{“ zinmin”}。排序顺序无关紧要。