pytanie o zbiory :)

0

Witam.

Odczytuje sobie pewne ustawienie typu Boolean, i w zależności od tego dodaje bądź odejmuje jakiś element ze zbioru.

Na przykład:

var
  b: Boolean;
  S: set of char;
begin
  ...
  b := True; // dla przykładu.

  // i teraz...
  if b then 
    Include(s, '7') 
  else
   Exclude(s, '7');
end;

A pytanie jest: czy można to zrobić w jednej linijce - to znaczy sprawdzenie:

  if b then 
    Include(s, '7') 
  else
   Exclude(s, '7');

Głowie się i nic nie mogę wymyśleć.. Chcę po porstu bardziej elegancki sposób aby zrobić to w jednej linijce.... macie jakiś pomysł ?

0
  if b then  Include(s, '7')  else Exclude(s, '7');

i jest 1 linjka :D

P.S. wiem ze chyba raczej na pewno nie o to ci chodzi.

0

Rzeczywiście jedna linijka :-D

0

Wiesz.. gdyby jeszcze te zmienne były takich długości to jeszcze byłbym skłonny odejść od eleganckiego zapisu - jestem niestety dość wymagający jesli chodzi o czystość kodu. U mnie niestety takie rozwiązanie odpada bo już samo "b" zamienia się w INI.ReadBool, a za seksje podstaw jakies 30 innych znaków i wychodzi cos niedobrego, że o samych nazwach zbiorów nie wspomne (są opcjami komponentu)...

0
var
  b: Boolean;
  S: set of char;
begin
  ...
  b := True; // dla przykładu.

  // i teraz...
  if b then 
    s := s + ['7'] 
  else
   s := s - ['7'];
end;

Jak dla mnie ladniejsze.
Krocej to juz ciezko... mozna co najwyzej w funkcji umiescic i pisac:

var
  b: Boolean;
  S: set of char;
begin
  ...
  b := True; // dla przykładu.

  // i teraz...
  Zmien(b, '7');
end;

Ew. gdyby poczytac o formie zapisu zbiorow, to moznaby za pomoca operacji na bitach cos robic, ale to raczej niewiele zmieni.

0

Zawsze możesz zadeklarować osobną funkcję dodająco-odejmującą. Jej wywołanie na pewno będzie jedną linijką :)

0

albo zdefiniowac wlasne nazw tak jak w c++

#define bardzo_dluga_nazwa_ktorej_nie_chcesz_uzywac  X

no i w kodzie uzywasz tylko tego X czy co tam sobie ustawisz

tylko ze ja nie wiem jak to sie robi w delphi:-)

0

Dryobates: może i bardziej eleganckie, ale (jak <ort>pisze </ort>w helpie), zapis s:=s+[x] jest mniej efektywny od Include(s,x). Tak to chyba jedyny sposób, żeby to skrócić, to napisać procedure...

0

Procedura raczej odpada bo te zbiory są różnych typów, więcej bym miał roboty niż pożytku, no cóż - myslalem ze mozna to jakos ładniej zrobic, ale chyba jednak nie ;( ..

1 użytkowników online, w tym zalogowanych: 0, gości: 1