Оптимално сравнение

C++ JAVA
Post Reply
User avatar
dakata__92
Web-tourist
Web-tourist
Posts: 3277
Joined: Tue Aug 02, 2011 7:24 pm
Answers: 126

Оптимално сравнение

Post by dakata__92 » Sun Aug 31, 2014 8:25 am

Как мога най оптимално да сравня 4 променливи дали са равни на друга променлива? Не ми се иска да сравнявам всяка променлива по отделно или да изписвам дълги редове с код. Примерно нещо такова, което е грешно естествено но в името на примера:
[php]
if(($one && $two && $three && $four) == $compare)
{
echo 'DA';
}
else
{
echo 'NE';
}
[/php]
Все си мисля, че има доста по-оптимален начин за сравнение от колкото да сравнявам всяка по отделно:
[php]
if($one == $compare && $two == $compare && $three == $compare && $four == $compare)
{
echo "DA";
}
else
{
echo "NE";
}
[/php]
Питам защото ми предстои да правя доста на брой сравнения с доста повече от 4 променливи и принципно искам да сваля броя на редовете. Не ми пречи да го драсна по начина по който съм писал доста пъти, но не пречи да попитам за по-оптимално сравняване.

fbian
Турист
Турист
Posts: 204
Joined: Sat May 26, 2012 3:55 pm
Answers: 18

Post by fbian » Sun Aug 31, 2014 9:44 am

Можеш да си направиш функция и да й подаваш стойностите на променливите в масив + другата променлива,на която искаш да са равни и с цикъл да проверяваш за всяка.
[php]
function check($arr = array(),$var) {
$result = false;
foreach($arr as $key => $val) {
if($val == $var) $result = true;
else $result = false;
}
return $result;
}

if(check(array('val1','val2','val3'),'val')) echo 'da';
else echo 'ne';
[/php]
Last edited by fbian on Sun Aug 31, 2014 9:49 am, edited 3 times in total.

User avatar
dakata__92
Web-tourist
Web-tourist
Posts: 3277
Joined: Tue Aug 02, 2011 7:24 pm
Answers: 126

Post by dakata__92 » Sun Aug 31, 2014 9:46 am

Оправих се. Използвах базисно сравнеие true false и после само проверка с if($one && $two) ....

Code: Select all

	$compare = "      ";
	$one = ($arr[$y_start][$x_start] == $compare)? true : false;
	$two = ($arr[$y_start][$x_stop] == $compare)? true : false;
	$three = ($arr[$y_stop][$x_start] == $compare)? true : false;
	$four = ($arr[$y_stop][$x_stop] == $compare)? true : false;
if($one && $two && $three && $four)
{
echo "da";
}
else
{
echo "ne";
}

fbian
Турист
Турист
Posts: 204
Joined: Sat May 26, 2012 3:55 pm
Answers: 18

Post by fbian » Sun Aug 31, 2014 9:50 am

Да,но така пак изписваш всяка проверка.

User avatar
dakata__92
Web-tourist
Web-tourist
Posts: 3277
Joined: Tue Aug 02, 2011 7:24 pm
Answers: 126

Post by dakata__92 » Sun Aug 31, 2014 9:57 am

fbian wrote:Да,но така пак изписваш всяка проверка.
Да така е, но за случая който ползвам циклична проверка изобщо не е наложителна и приложима спрямо различните сравнения които ще правя. Идеята с цикъла е добра но аз вече се намирам във вложени цикли и ми се въртят променливите, просто във функцията исках като писане да сбия кода не да добавям ненужни цикли. :) Интересувах се дали има подобен начин и в един форум намерих решението на това което търсех. :?:

User avatar
anonimen
Web-tourist
Web-tourist
Posts: 1573
Joined: Mon Jun 11, 2012 6:07 pm
Answers: 163
Location: Parse error: unexpected "}" in /home/index.php on line 26

Post by anonimen » Sun Aug 31, 2014 1:23 pm

Така изглежда по-хубаво :):)

[php]$a = 5;
$b = 5;
$c = 5;

$should_be = 5;

$values = array($a, $b, $c);

if(!array_diff($values) && $a == $should_be) {
echo 'equal';
}
else {
echo 'not equal';
}[/php]

:arrow: + си спестяваш един ред, ако сложиш $values директно в аrray_diff :?: :?:

User avatar
dakata__92
Web-tourist
Web-tourist
Posts: 3277
Joined: Tue Aug 02, 2011 7:24 pm
Answers: 126

Post by dakata__92 » Sun Aug 31, 2014 1:39 pm

Така е но наистинй кода, който дадох ми спестява изключително много проверки, тъй като ми се налага да сравнявам и променливите по между им а така когато са вече определени със съкратен if else само ги взимам и извършвам логическите следствия в пъти по-добре и удобно.

User avatar
eLite
Потребител
Потребител
Posts: 967
Joined: Mon Apr 07, 2008 8:08 pm
Answers: 59
Location: София

Post by eLite » Mon Sep 01, 2014 8:34 am

Ще си имаш главоболия при евентуална нужда от промяна на броя на операндите. По-добре използвай масив.

В противен случай можеш да използваш това:

[php]
$a = 1; $b = 2; $c = 3; $d = -4;

$o = -4;

switch($o) {
case $a:
case $b:
case $c:
case $d:
echo 'Da!';
break;
default:
echo 'Ne!';
break;
}
[/php]

Post Reply