Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
asjameez
Kreisi kasutaja

liitunud: 10.12.2006
|
02.03.2010 19:00:25
Silverlight / C# |
|
|
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 |
|
 |
-ordi-
HV vaatleja
liitunud: 03.06.2009
|
02.03.2010 19:29:42
Re: Silverlight / C# |
|
|
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 |
|
 |
mikk36
HV Guru

liitunud: 21.02.2004
|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
 |
asjameez
Kreisi kasutaja

liitunud: 10.12.2006
|
02.03.2010 19:44:21
|
|
|
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 |
|
 |
andrusny
Kreisi kasutaja

liitunud: 20.03.2006
|
02.03.2010 20:10:44
|
|
|
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 |
|
 |
mikk36
HV Guru

liitunud: 21.02.2004
|
02.03.2010 20:14:03
|
|
|
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 |
|
 |
asjameez
Kreisi kasutaja

liitunud: 10.12.2006
|
02.03.2010 20:54:00
|
|
|
Sai asi veidi selgemaks, tänud vastajatele
|
|
Kommentaarid: 63 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
61 |
|
tagasi üles |
|
 |
Absona
Lõuapoolik

liitunud: 17.09.2008
|
02.03.2010 21:42:52
|
|
|
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 |
|
 |
Deadlock
Kreisi kasutaja
liitunud: 16.07.2004
|
03.03.2010 01:43:43
|
|
|
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 |
|
 |
reneSharp
HV kasutaja

liitunud: 13.11.2005
|
03.03.2010 14:54:59
|
|
|
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
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 |
|
 |
Ho Ho
HV Guru

liitunud: 16.02.2002
|
10.03.2010 14:20:14
|
|
|
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 |
|
 |
|