24. juni 2010 - 20:53
Der er
10 kommentarer og 1 løsning
Metode til at tjekke tekst streng
Hejsa Jeg har brug for en metode, som kan checke to input params. Hvis input2 indeholder de samme ord som input 1, så skal de ord fjernes i input2 strengen. Noget ala: input1 = Niels Hansen input2 = Hansen public string FilterStringDuplicates(string input1, string input2) { string returnValue = string.Empty; ....................? return returnValue; } returnValue = Niels Hansen Takker. Mvh H.
Annonceindlæg fra Bazoom
Få styr på gamer computerens hardware
I gaming-verdenen kan det rigtige hardware være forskellen mellem en uforglemmelig spiloplevelse og konstant frustration. Her er hvad du bør overveje.
22. juli 2024
Jeg kan ikke faa din tekst og dit eksempel til at matche. Men her et eksempel som jeg tror matcher teksten: using System; using System.Linq; namespace E { public class Program { public static string FilterStringDuplicates(string input1, string input2) { return input2.Split(' ').Except(input1.Split(' ')).Aggregate((s1,s2) => s1 + ' ' + s2); } public static void Main(string[] args) { Console.WriteLine(FilterStringDuplicates("Hansen", "Niels Hansen")); Console.WriteLine(FilterStringDuplicates("DD BB", "AA BB CC DD EE")); Console.ReadKey(); } } }
wow... et Linq kald! :-) Det har jeg stadig ik fattet, men det er smart! har testet metoden og det ser ud til at virke indtil input1 og input2 er nøjagtig ens. Så får jeg denne fejl: "Sequence contains no elements error". Kan man lave et smart Linq check på om input1 og input2 er ens?
Hm. Aggregate giver tilsyneladende problemer med ingen elementer. Den primitive loesning er: public static string FilterStringDuplicates(string input1, string input2) { IEnumerable<string> dif = input2.Split(' ').Except(input1.Split(' ')); if(dif.Count() > 0) { return dif.Aggregate((s1,s2) => s1 + ' ' + s2); } else { return ""; } }
Men det kan goeres bedre: public static string FilterStringDuplicates(string input1, string input2) { return string.Join(" ", input2.Split(' ').Except(input1.Split(' ')).ToArray()); }
hejsa har testet dit eksempel men det virker ikke helt efter hensigten. nu tager lige et copy paste fra mit test data. felter i DB tbl. ----------------------------------------------------- felt1 | felt2 ----------------------------------------------------- Bodegas Mauro | Mauro Vendimia Seleccionada ----------------------------------------------------- Output med dit sidste eksempel: Bodegas Det ønskede output: Bodegas Mauro Vendimia Seleccionada så det er Mauro der skal fjernes fra felt2, fordi det indgår i felt1.
Du vil merge felterne og bare undgå duplikater?
Så prøv: public static string FilterStringDuplicates(string input1, string input2) { return string.Join(" ", input1.Split(' ').Concat(input2.Split(' ').Where(s => !input1.Split(' ').Contains(s))).ToArray()); }
jeg binder mine data til custom entity classes. Så selve mergingen håndtere jeg selv. Jeg vil kun undgå duplikater (fjerne ord i felt2, som matcher/også findes i felt1. raw data fra DB: Bodegas Mauro | Mauro Vendimia Seleccionada vil gerne vise det sådan: Bodegas Mauro | Vendimia Seleccionada I min RowDataBound event metode, binder jeg entity klassens props. til en hyperlink og label kontroller m.m.: string name = StringUtil.RemoveDuplicateStrings(wine, winery); link.Text = name; så det der kommer ind i metoden er: StringUtil.RemoveDuplicateStrings("Bodegas Mauro","Mauro Vendimia Seleccionada"); Outputtet på dit sidste eksempel er: Mauro Bodegas
29. juni 2010 - 22:00
#10
Hvis du kun vil fjerne duplikaterne saa skal du bruge loesningen i #4. Vil du baade merge og fjerne duplikater skal du bruge loesningen fra #8.
30. juni 2010 - 12:49
#11
du har ret, det kører bare med #4. takker igen!
Kurser inden for grundlæggende programmering