Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  Silverlight / C# märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
asjameez
Kreisi kasutaja
asjameez

liitunud: 10.12.2006




sõnum 02.03.2010 19:00:25 Silverlight / C# vasta tsitaadiga

Tahan genereerida näiteks 10 arvu nii, et need ei korduks.
Tundub, et polegi nii lihtne, kui paistab.
Silverlight ei tule üldse toime Array, ArrayList, ega int[] tüüpidega. (Array ega ArrayListi keeldub isegi tekitamast, kuigi System.Collections on imporditud ja int[] ei saa anda kohta kätte muutujana, int[0] = 2 toimib, aga nulli asemel on vaja muutuja saada)
Mismoodi siin maailmas arvude massiivi panek käib?
Kommentaarid: 63 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 61
tagasi üles
vaata kasutaja infot saada privaatsõnum
-ordi-
HV vaatleja

liitunud: 03.06.2009




sõnum 02.03.2010 19:29:42 Re: Silverlight / C# vasta tsitaadiga

asjameez kirjutas:

int[0] = 2 toimib, aga nulli asemel on vaja muutuja saada)
Mismoodi siin maailmas arvude massiivi panek käib?


Miks on vaja 0 asemel muutuja saada, mis eesmärk sellel on?

Lihtsa massiivi tegemine peaks nii käima, ise ei kasuta Silverlighti ega jms.
Alustad ikka nii?

using System.Collections;


int[] myIntArray = new int[5] { 1, 2, 3, 4, 5 };


Kui see ei tööta, siis on ilmselgelt midagi väga kantis. Ise käin sellest suure kaarega mööda.
Kommentaarid: 2 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 2
tagasi üles
vaata kasutaja infot saada privaatsõnum
mikk36
HV Guru
mikk36

liitunud: 21.02.2004




sõnum 02.03.2010 19:31:22 vasta tsitaadiga

Ehk saad abi selliselt lehelt: http://msdn.microsoft.com/en-us/library/system.array%28VS.95%29.aspx
Näis loogiline tekst olema seal.
Kommentaarid: 85 loe/lisa Kasutajad arvavad:  :: 0 :: 2 :: 78
tagasi üles
vaata kasutaja infot saada privaatsõnum
asjameez
Kreisi kasutaja
asjameez

liitunud: 10.12.2006




sõnum 02.03.2010 19:44:21 vasta tsitaadiga

0 asemel muutuja, sest...

* for tsükli sees randomiga genereeritakse x arvu
* otsitakse massiivist, kas genereeritud arv on unikaalne
* kui genereeritud arv on unikaalne, lisatakse see massiivi lõppu, vastasel juhul genereeritakse uuesti

Seda msdni olen uurinud, vähe abi saab sealt, kes pole enne microsofti asjadega tegelenud.
Kommentaarid: 63 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 61
tagasi üles
vaata kasutaja infot saada privaatsõnum
andrusny
Kreisi kasutaja
andrusny

liitunud: 20.03.2006




sõnum 02.03.2010 20:10:44 vasta tsitaadiga

Pole kül c kokkupuudet, kuid kas ta siis nii erinev teistest?
tsitaat:
int[0] = 2 toimib, aga nulli asemel on vaja muutuja saada)


kas asi midagi taolist ei võiks olla? Süntaks on kindlasti suht vale, arvata, et c vaja ka see variable - number defineerida.

number = 1;
int[] myIntArray = new int[5] { };
myIntArray[number] =  4;

_________________
Kommentaarid: 7 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 7
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
mikk36
HV Guru
mikk36

liitunud: 21.02.2004




sõnum 02.03.2010 20:14:03 vasta tsitaadiga

asjameez, jäi mulje et sa ei saa isegi massiivi loodud. Silverlightis nagu aru sain ei ole eraldi andmetüüpi "array", vaid on objekt Array.
Array'st asjade saamiseks, seal oleva määramiseks ja suuruse muutmiseks näisid olema kenasti meetodid GetValue(), SetValue() ja Resize().
Otsingu tarvis on rahva poolt kirjutatud lisameetodid: http://michaelsync.net/2009/03/22/silverlight-3-array-helper
Kommentaarid: 85 loe/lisa Kasutajad arvavad:  :: 0 :: 2 :: 78
tagasi üles
vaata kasutaja infot saada privaatsõnum
asjameez
Kreisi kasutaja
asjameez

liitunud: 10.12.2006




sõnum 02.03.2010 20:54:00 vasta tsitaadiga

Sai asi veidi selgemaks, tänud vastajatele thumbs_up.gif
Kommentaarid: 63 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 61
tagasi üles
vaata kasutaja infot saada privaatsõnum
Absona
Lõuapoolik
Lõuapoolik

liitunud: 17.09.2008




sõnum 02.03.2010 21:42:52 vasta tsitaadiga

Unusta need massiivid sellistel asjadel ära. Teevad asja väga aeglaseks kui on vaja tuhandeid unikaalseid numbreid genereerida.


        static void Main(string[] args)
        {
            UnikaalsedNumbrid(10, 0, 20);
        }

        /// <summary>
        /// Genereerib unikaalseid numbreid
        /// </summary>
        /// <param name="kui_Palju">Kui palju unikaalseid numbreid on vaja genereerida</param>
        /// <param name="min_vahemik">Miinimum, kust alates hakatakse numbreid genereerima</param>
        /// <param name="max_vahemik">Maksimum, kust alates lõpetatakse numbrite genereerimine</param>
        private static void UnikaalsedNumbrid(int kui_Palju, int min_vahemik, int max_vahemik)
        {
            if ((max_vahemik - min_vahemik) < kui_Palju)
                throw new Exception("\n" + "Viga. Min vahemik ei tohi Max vahemikust suurem olla!" + "\n" +
                    "Viga. Määrake õige unikaalsete numbrite arv!");

            var nimekiri = new List<int>();
            var genereerija = new Random();
            var jataMeelde = kui_Palju;

            for (var i = 1; i <= jataMeelde; i++)
            {
                var genereeritudNumber = genereerija.Next(min_vahemik, max_vahemik);

                if (!nimekiri.Contains(genereeritudNumber)) nimekiri.Add(genereeritudNumber);
                else jataMeelde++;
            }

            nimekiri.ForEach(Console.WriteLine);
            nimekiri.Clear();
       }


_________________
Veebilehed, veebiprogrammeerimine, veebilahendused
Erinevad rakendused ja skriptid.
Kommentaarid: 11 loe/lisa Kasutajad arvavad:  :: 2 :: 0 :: 8
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
Deadlock
Kreisi kasutaja

liitunud: 16.07.2004




sõnum 03.03.2010 01:43:43 vasta tsitaadiga

Kasuta numbrite hoiustamiseks mõnda Set'i, ja kontrolli ainult seda, kas see sisaldab kümmet numbrit või mitte. (Set ei võta kahte ühesugust numbrit lihtsalt vastu).
Kui set.size() on 10, siis ongi sul kümme unikaalset numbrit.

Set'i algoritmid on palju tõhusamad, kui massiivide läbikäimine.
Kommentaarid: 8 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 8
tagasi üles
vaata kasutaja infot saada privaatsõnum
reneSharp
HV kasutaja
reneSharp

liitunud: 13.11.2005




sõnum 03.03.2010 14:54:59 vasta tsitaadiga

Bluebull kirjutas:
Kasuta numbrite hoiustamiseks mõnda Set'i, ja kontrolli ainult seda, kas see sisaldab kümmet numbrit või mitte. (Set ei võta kahte ühesugust numbrit lihtsalt vastu).
Kui set.size() on 10, siis ongi sul kümme unikaalset numbrit.

Set'i algoritmid on palju tõhusamad, kui massiivide läbikäimine.


indeed icon_smile.gif


static void Main(string[] args)
        {
            UnikaalsedNumbrid(10, 0, 20);
        }

        /// <summary>
        /// Genereerib unikaalseid numbreid
        /// </summary>
        /// <param name="kui_Palju">Kui palju unikaalseid numbreid on vaja genereerida</param>
        /// <param name="min_vahemik">Miinimum, kust alates hakatakse numbreid genereerima</param>
        /// <param name="max_vahemik">Maksimum, kust alates lõpetatakse numbrite genereerimine</param>
        private static void UnikaalsedNumbrid(int kui_Palju, int min_vahemik, int max_vahemik)
        {
            if ((max_vahemik - min_vahemik) < kui_Palju)
                throw new Exception("\n" + "Viga. Min vahemik ei tohi Max vahemikust suurem olla!" + "\n" +
                    "Viga. Määrake õige unikaalsete numbrite arv!");

            var nimekiri = new HashSet<int>();
            var genereerija = new Random();
            var jataMeelde = kui_Palju;

            while(true)
            {
                var genereeritudNumber = genereerija.Next(min_vahemik, max_vahemik);
                nimekiri.Add(genereeritudNumber);
                if (nimekiri.Count == 10) break;
                 
            }

            foreach (var item in nimekiri)Console.WriteLine(item);
            nimekiri.Clear();
        }
[/quote]
Kommentaarid: 25 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 25
tagasi üles
vaata kasutaja infot saada privaatsõnum
Ho Ho
HV Guru
Ho Ho

liitunud: 16.02.2002




sõnum 10.03.2010 14:20:14 vasta tsitaadiga

Kas nonde juhuslike arvude väärtused on alati n ... n+10? Kui jah siis märksa efektiivsem oleks võtta massiiv, too täita nonde väärtustega ning seejärel massiivi liikmed randomiga segi ajada. Loomulikult see süsteem ei tööta, kui sul on 10 arvu millede väärtused võivad kõikuda näiteks 0-1000 vahel.
_________________
Teach a man to reason and he'll think for a lifetime
Common sense - so rare that it's a damn superpower
Vaadates paljude inimeste sõnavõtte siin ja mujal jääb üle ainult klassikuid tsiteerida - "I weep for humanity"
Kommentaarid: 106 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 86
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  Silverlight / C#
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.