xml-ishですが正規化されていない文字列を持つオブジェクトの配列があり、idの文字列のリスト/配列を持っています。C#Linq、2つのリストで同じアイテムを検索しています
idのリストを持つ文字列がオブジェクトの1つにも含まれているかどうかを調べる必要があります。
ここでは、我々がしようとしているセットアップがあります。
public class Wrapper
{
public string MyProperty { get; set; }
}
class Program
{
static void Main(string[] args)
{
List<Wrapper> wrappers = new List<Wrapper>()
{
new Wrapper{ MyProperty = "<flkds,dlsklkdlsqkdkqslkdlqk><id>3</id><sqjldkjlfdskjlkfjsdklfj>"},
new Wrapper{ MyProperty = "<flkds,dlsklkdlsqkdkqslkdlqk><id>2</id><sqjldkjlfdskjlkfjsdklfj>"}
};
string[] ids = { "<id>0</id>", "<id>1</id>", "<id>2</id>" };
var props = wrappers.Select(w => w.MyProperty);
var intersect = props.Intersect(ids, new MyEquilityTester());
Debugger.Break();
}
}
class MyEquilityTester: IEqualityComparer<string>
{
public bool Equals(string x, string y)
{
return x.Contains(y);
}
public int GetHashCode(string obj)
{
return obj.GetHashCode();
}
}
編集:私たちは、ラッパーは小道具を持つオブジェクトを持っているのでtrue
言うれるintersect
に.Any()
を行うときに我々が期待する何
ですが<id>2</id>
を含む、intersect
はnull
です。
私たちが間違った方法を使用している場合は、お伝えください。それは可能な限り速く動作するはずです。シンプルなtrue
が見つかったら!
class MyEquilityTester: IEqualityComparer<string>
{
public bool Equals(string x, string y)
{
return x.Contains(y) || y.Contains(x);
}
public int GetHashCode(string obj)
{
return 0;
}
}
をし、それが
<flkds,dlsklkdlsqkdkqslkdlqk><id>2</id><sqjldkjlfdskjlkfjsdklfj>
GetHashCode
は常に0
を返すので、これは動作し、x.Contains(y) || y.Contains(x)
チェック見つける:
あなたの質問は何してくださいですか? –
@DanielHilgarth私は投稿を更新しました – Frederiek
ここで行うべき最も良いことは、「MyProperty」のテキストをより読みやすく/ linqに優しい/保守可能な構造に解析することです。 – devundef