abbiamo il seguente setup: Abbiamo una matrice di oggetti con una stringa (xml-ish ma non normalizzata) e abbiamo una lista/array di stringhe con id .C# Linq, cercando gli stessi elementi in due elenchi
Abbiamo bisogno di scoprire se una stringa da quella lista con ID è anche pressante in uno degli oggetti.
Qui abbiamo una messa a punto che abbiamo provato:
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();
}
}
Edit:
Ciò che ci aspettiamo è quando facciamo un .Any()
su intersect
che dice true
perché wrapper ha un oggetto con un oggetto di scena quello contiene <id>2</id>
, intersect
è null
.
Se si utilizza il metodo sbagliato, si prega di dire. Dovrebbe funzionare il più velocemente possibile. Un semplice true
quando trovato lo farà!
Qual è la tua domanda per favore? –
@DanielHilgarth Ho aggiornato il post – Frederiek
La cosa migliore da fare qui è analizzare il testo in 'MyProperty' in una struttura più leggibile/linq-friendly/manutenibile. – devundef