Avatar billede glenn007 Nybegynder
09. januar 2009 - 16:22 Der er 6 kommentarer

tælle i et array

har mit array
collection = "abcdabccbddbccdbaadbcd";
string temp = collection;
string bogstavkode[a,b,c,d] // søg efter disse forekomster
gruppe[] og det er fyldt med variablen collection.

kan man tælle på en hurtig måde hvor mange der er af hver bogstav ud fra bogstav indexet a b c d

altså fire bogstaver der skal tælles op. så jeg kan have datane

a = 233 styk
b = 213 styk
c.........
d ....

jeg kunne jo lave 1000 if sætninger men det syntes jeg er uoptimalt og søger derfor en hurtigere og mere korrekt måde.

nogle der har et forslag. det må være det der hedder et todimensionalt array det her.
Avatar billede arne_v Ekspert
09. januar 2009 - 16:42 #1
enten et array med 256 eller 65536 elementer og tael op baseret paa numerisk vaerdi
af bogstav

eller et Dictionary<char,int>
Avatar billede arne_v Ekspert
09. januar 2009 - 16:44 #2
men du skal have en form for loekke (evt. implicit via LINQ and group by)
Avatar billede glenn007 Nybegynder
09. januar 2009 - 16:52 #3
hej arne,

ja har lige prøvet således og jeg tror det er NØSTEN rigtigt. dog virker koden ikke som jeg havde tiltænkt mig.
uanset havd siger den der er 0 fundet. Men koden kører ellers fint *G*

            color1 = "sss"; // bare til test for at sikre der er indhold i farve skema
            color2 = "aa";


            string collection = "" + color1 + "," + color2 + "," + color3 + "," + color4 + "," + color5 + "," + color6 + "," + color7;
           
            string temp = collection;
            string[] kategori = temp.Split(',');
           

            string[] gruppe = kategori;


            string val;
            bool found = false;

           

            val = "s"; // værdien der skal tælles op og retuneres
            int farve = 0;
           
            foreach (string x in gruppe)
            {
                if (x == val)
                {
                    farve = farve + 1;
                    found = true;
                    break;
                }


                if (found)
                    MessageBox.Show("" + farve + " fundet");
            }

            MessageBox.Show("" + farve + " fundet");
// kontrol message box for at se værdi af farve
Avatar billede glenn007 Nybegynder
09. januar 2009 - 17:18 #4
jeg er tæt på en løsning selv. har ihvertfald fundet ud af at få det jeg havde lavet til at virke.

jeg giver lige besked om ikke så længe
Avatar billede arne_v Ekspert
10. januar 2009 - 03:27 #5
Til inspiration:

using System;
using System.Collections.Generic;

namespace E
{
    public class Program
    {
        public static void Main(string[] args)
        {
            string s = "abracadbra";
            Dictionary<char, int> res = new Dictionary<char, int>();
            Array.ForEach(s.ToCharArray(), delegate(char c) { if(res.ContainsKey(c)) res[c]++; else res[c] = 1; });
            foreach(char c in res.Keys)
            {
                Console.WriteLine(c + " : " + res[c]);
            }
            Console.ReadKey();
        }
    }
}
Avatar billede kastermester Nybegynder
12. januar 2009 - 09:26 #6
Altså hvis du har adgang til LINQ:

            string s = "aabccdddbaaabccdd";

            char[] chars = s.ToCharArray();

            Dictionary<char, int> list = (from c in chars
                                          group c by c into g
                                          orderby g.Key
                                          select new { Char = g.Key, Count = g.Count() }).ToDictionary(k => k.Char, v => v.Count);

Burde gøre tricket.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester