Gå til innhold

ProgrammeringsBaren! Småprat, om det du elsker!


Anbefalte innlegg

Videoannonse
Annonse

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 av Matsemann
Lenke til kommentar

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 av Gnålern
Lenke til kommentar

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 av GeirGrusom
Lenke til kommentar
Gjest Slettet+9871234

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 av Slettet+9871234
Lenke til kommentar
Gjest Slettet+9871234

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. :roll:

Endret av Slettet+9871234
Lenke til kommentar

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. :roll:

Jeg kaller det tastatur-dysleksi ;)

Lenke til kommentar

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

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 av GeirGrusom
Lenke til kommentar
Gjest Slettet+9871234

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

:hm:

 

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? :blush:

Endret av Slettet+9871234
Lenke til kommentar

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
Gjest Slettet+9871234

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 av Slettet+9871234
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...