2013-06-04 2 views
2

есть некоторый код, в котором я часто делаю что-то вроде следующего:Есть ли более элегантный способ переписать A с B только в том случае, если B больше, чем A?

if(B > A) A = B; 

И мне было просто интересно, если есть более элегантный способ сделать это (используя минимальное количество ссылок на переменные), как я работаю с большими противных вложенных массивов и, таким образом, в моем коде часто выглядит как:

if(A[1][5][9][201][600][0xff] > A[600][3][8][0xW/E][1337][6]) A[600][3][8][0xW/E][1337][6] = A[1][5][9][201][600][0xff]; 

и в какой-то момент я просто хочу, чтобы потерять ...

Пожалуйста, обратите внимание, что «0xW/E» не является действительным целым числом.

+0

Не могли бы вы охарактеризовать, что изящно вы с вашей точки зрения? – stinepike

+0

@StinePike в основном что-то в java, предназначенном только для такого рода вещей, например, trernary иногда очень элегантно <3 –

+2

Я думаю, что проблема здесь в вашей схеме данных. Ваши большие неприятные вложенные массивы выглядят очень незаметно, и я предлагаю вам сначала попробовать его рефакторинг; с тем, что задействовано много осей изменчивости, я бы предложил использовать базу данных или HashMap, которая в качестве ключа принимает набор значений определенной длины (исходные индексы). – JAB

ответ

8

Как насчет использования Math.max?

A = Math.max(A,B); 
+0

Мой бог, это именно то, что я искал! Могу ли я потерять производительность? –

+2

Целые операции - это самые быстрые операции, которые вы можете выполнить;) –

+0

Отлично! Только представьте себе возможности! (A> B && A> C) VS (A> Math.max (B, C)) –

1

Вы можете избавиться от одного из них:

newValue = A[600][3][8][0xW/E][1337][6]; 
if(A[1][5][9][201][600][0xff] > newValue) A[1][5][9][201][600][0xff] = newValue; 
+0

Вы можете избавиться от обоих, поскольку newValue будет ссылкой. Это означает, что я могу совместить это с ответом Йохана и сделать его супер ультра сексуальным: 3 –

+0

О, это ложь, но я мог бы сделать это ссылкой ... –

1

Что об этом: A = (A> B)? A: B;

+0

тройной! : 3 К сожалению, это выглядит только больше и более неприятно в этом случае. D: –

+1

Забавный, вы нашли способ сделать его еще хуже - у него больше переменных ссылок, чем у оригинала, и это то, что он пытается свести к минимуму. –

+1

@ Не используйте этот код внутри метода. К сожалению (для Jairo) это * сделано * в 'Math # max'. –

Смежные вопросы