RAD1V Skrevet 5. mars 2012 Del Skrevet 5. mars 2012 Er det noen kortere måte å skrive dette i C#? int x; ... if(x == 5 || x == 8 || x == 2 || x == 65) Lenke til kommentar
x871kx6167ss7 Skrevet 5. mars 2012 Del Skrevet 5. mars 2012 if(x==5||x==8||x==2||x==65) 14 tegn mindre! Neida... Du kan sikkert lage en liste med tallene og spørre om x er et element i listen, men er det verdt det? Kanskje noen som kan C# kan gi et skikkelig svar. Lenke til kommentar
Matsemann Skrevet 5. mars 2012 Del Skrevet 5. mars 2012 (endret) Avhengig av hva du skal, kan det finnes kortere måter. Men den der kan ikke forkortes om ikke C# har noen spesielle greier (jeg kan ikke C#). En ting man kan gjøre er å sjekke om det er et element i en liste. Derimot om du har veldig mange if-tester, type: if(x == 3 || x == 5 || x == 9) { ... } else if(x == 4 || x == 7 || x == 8) .. osv så kan switch case (lenke) være grei å bruke. Endret 5. mars 2012 av Matsemann Lenke til kommentar
Laserbeam Skrevet 5. mars 2012 Del Skrevet 5. mars 2012 (endret) Java: int[] numbers = new int[] {5, 8, 2, 65}; boolean equal = false; for (int i : numbers) { if (x == i) { equal = true; } } if (equal) { // Kjører hovedlogikken her, slik at at den ikke blir repetert flere ganger i for loopen // Do something: } else { // Do something else: } I C# blir det vel å bruke en foreach, men programmeringslogikken er den samme. Endret 5. mars 2012 av Gnålern Lenke til kommentar
tomsi42 Skrevet 5. mars 2012 Del Skrevet 5. mars 2012 (endret) Det RAD1V etterspør er vel noe slikt: if (x in [2, 5, 8, 65]){ } Og det har vel ikke C# støtte for? Endret 5. mars 2012 av tomsi42 Lenke til kommentar
RAD1V Skrevet 5. mars 2012 Del Skrevet 5. mars 2012 Takker int.MaxValue+1==int.MinValue true Hvorfor blir ikke alle bitene 0 istedenfor? Er biten til venstre 0 når positivt så settes den som 1? Noen grunner til språkforfatteren gjorde det slik? Lenke til kommentar
duckers Skrevet 5. mars 2012 Del Skrevet 5. mars 2012 Detts skulle nå fungere i C#. int x = 3; int[] t = {1,2,3,4,5,6}; if (t.Any( n => n == x )) doMyStuff(); 1 Lenke til kommentar
GeirGrusom Skrevet 5. mars 2012 Del Skrevet 5. mars 2012 (endret) Det RAD1V etterspør er vel noe slikt: if (x in [2, 5, 8, 65]){ } Og det har vel ikke C# støtte for? if(new int[]{2, 5, 8, 65}.Contains(x)) C# er et funksjonelt, imperativt, obligatorisk objektorientert, dynamisk, generisk og statisk typet språk. Så det er ganske funksjonsrikt i det minste. Endret 5. mars 2012 av GeirGrusom Lenke til kommentar
Gjest Slettet+9871234 Skrevet 5. mars 2012 Del Skrevet 5. mars 2012 (endret) Er det noen kortere måte å skrive dette i C#? int x; ... if(x == 5 || x == 8 || x == 2 || x == 65) Men er ikke denne raskest og sikrest? Den slutter vel om x == 5? Jeg liker ikke at identitets (== ) test erstattes av om x er i en datastruktur? OK, godtar at det var snakk om kortest mulig skrivemåte. Endret 5. mars 2012 av Slettet+9871234 Lenke til kommentar
tomsi42 Skrevet 5. mars 2012 Del Skrevet 5. mars 2012 if(new int[]{2, 5, 8, 65}.Contains(x)) C# er et funksjonelt, imperativt, obligatorisk objektorientert, dynamisk, generisk og statisk typet språk. Så det er ganske funksjonsrikt i det minste. Den var lettere å forsatå enn duckers forslag Lenke til kommentar
Gjest Slettet+9871234 Skrevet 5. mars 2012 Del Skrevet 5. mars 2012 (endret) if(new int[]{2, 5, 8, 65}.Contains(x)) C# er et funksjonelt, imperativt, obligatorisk objektorientert, dynamisk, generisk og statisk typet språk. Så det er ganske funksjonsrikt i det minste. Den var lettere å forsatå enn duckers forslag forsatå Endelig en som skriver som meg. Endret 5. mars 2012 av Slettet+9871234 Lenke til kommentar
tomsi42 Skrevet 5. mars 2012 Del Skrevet 5. mars 2012 Men er ikke denne raskest og sikrest? Den slutter vel om x == 5? Den er ihverfall raskest Jeg liker ikke at identitets (== ) test erstattes av om x er i en datastruktur? Det kommer vel an på hva som egentlig testes. En test om x er med i en liste over gyldige verdier bør jo være OK? Men listen bør nok lages utenfor if-setningen. OK, godtar at det var snakk om kortest mulig skrivemåte. Jeg synes sjekk mot liste er mer lesbar også. Endelig en som skriver som meg. Jeg kaller det tastatur-dysleksi Lenke til kommentar
GeirGrusom Skrevet 5. mars 2012 Del Skrevet 5. mars 2012 if(new int[]{2, 5, 8, 65}.Contains(x)) C# er et funksjonelt, imperativt, obligatorisk objektorientert, dynamisk, generisk og statisk typet språk. Så det er ganske funksjonsrikt i det minste. Den var lettere å forsatå enn duckers forslag Duckers sitt forslag gjør i essens det samme. Contains forteller om elementet forekommer i en iterasjon, mens Any forteller om et predikat treffer et sted i en iterator. Lenke til kommentar
duckers Skrevet 5. mars 2012 Del Skrevet 5. mars 2012 @GeirGrusom: Var det jeg også burde gjort, men kom på any før contains, så jeg brukte den.. Contains er selvfølgelig mye lettere å lese. Lenke til kommentar
GeirGrusom Skrevet 9. mars 2012 Del Skrevet 9. mars 2012 (endret) Er det noen kortere måte å skrive dette i C#? int x; ... if(x == 5 || x == 8 || x == 2 || x == 65) Men er ikke denne raskest og sikrest? Den slutter vel om x == 5? Jeg liker ikke at identitets (== ) test erstattes av om x er i en datastruktur? OK, godtar at det var snakk om kortest mulig skrivemåte. Det vil føre til akkurat det samme resultatet. En iterator vil avsluttes med en gang dersom elementet er i starten av en liste, så funksjonelt vil Contains føre til nesten den samme koden, bortsett fra at || vil erstattes av en for løkke. Her er en litt mer klumsete fremstilling av hva forskjellen er: bool result = true; if(x != 5) if(x != 8) if(x != 2) if(x != 65) result = false; og bool result = false; foreach(var item in new int[]{5, 8, 2, 65}) if(item == x) { result = true; break; } Resultatet vil rent funksjonelt være identisk. Det er bare en annen skrivemåte. Endret 9. mars 2012 av GeirGrusom Lenke til kommentar
Gjest Slettet+9871234 Skrevet 9. mars 2012 Del Skrevet 9. mars 2012 (endret) OK presisering. Resultatet vil rent funksjonelt være identisk. Det er bare en annen skrivemåte. Er du 100 % sikker? Jeg har tenkt litt over det. Kan der tenkes patologiske minnekollisjoner der den første strukturen er sikrest? Hva om du kjører nær minnegrensen (virtuelt + fysisk)? Du kjører med andre ord på en maskin der harddisken er full og minnet oppbrukt. Dog lite sannsynlig. Det var derfor jeg skrev patologiske. Dårlig minnehåndtering er kanskje uaktuelt i 2012. funksjonelt være identisk og annen skrivemåte Med andre ord, hvordan ser maskinkoden for de to tilfellene ut?? Jeg godtar identisk om maskinkoden er identisk. Jeg bruker ikke C#, så jeg har ingen kompilator som min embarcadero C / C++ kompilator å studere maskinkoden i. P.S. Hva er funksjonelt identisk? Er det et nytt vaskemiddel? Endret 9. mars 2012 av Slettet+9871234 Lenke til kommentar
GeirGrusom Skrevet 9. mars 2012 Del Skrevet 9. mars 2012 Funksjonelt identisk er at side-effektene er det samme, og at de vil gjøre like mange iterasjoner for å komme frem til det samme resultatet. Det var ihvertfall det som var den tiltenkte underforståtte forståelsen av begrepet. Lenke til kommentar
tomsi42 Skrevet 9. mars 2012 Del Skrevet 9. mars 2012 Funksjonelt identisk er at side-effektene er det samme, og at de vil gjøre like mange iterasjoner for å komme frem til det samme resultatet. Det var ihvertfall det som var den tiltenkte underforståtte forståelsen av begrepet. Det er slik jeg vil tolke "identisk" også. Jeg har liten tro på at de to løsningene vil gi identisk maskinkode. Jeg vet ikke om jeg er så veldig opptatt av det heller Lenke til kommentar
tomsi42 Skrevet 9. mars 2012 Del Skrevet 9. mars 2012 Over til noe annet; har folket noen tanker om språket Lua? Lenke til kommentar
Gjest Slettet+9871234 Skrevet 9. mars 2012 Del Skrevet 9. mars 2012 (endret) Over til noe annet; har folket noen tanker om språket Lua? Meget enkelt og brukt i blant annet spillprogrammering: http://www.kjellbleivik.com/Books/GameDevelopment.php#lua Husker jeg ikke feil er det et av skripting språkene i denne http://www.amazon.com/Scripting-Mastery-Premier-Press-Development/dp/1931841578 evig grønne klassikeren. PS: Gir ikke de ovennevnte eksemplene identisk maskin kode, kan du være sikker på at der er en djevel i de sikkert uvensentlige detaljene, men ikke alltid ... Spesielt om datastrukturen blir stor og man ikke har kontroll på minnet. Man må jo først deklarere og definere data strukturen slik GG gjør det. Mens den andre tar tilfelle for tilfelle || ... || ... || Jeg kan ikke noe om minnehåndtering i C# så tilgi meg om jeg tuller for mye. Endret 9. mars 2012 av Slettet+9871234 Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå