1

より少ないコード行で次のことを達成するためのより良い方法 (速度は必要なく、簡潔さと単純さが必要) はありますか? (下の例)

//    Example //
/*
 * Get Divisor For Number of Iterations - To Display Progress
*/
int fGetDivisor(int iMaxIters) {  
  int iDiv = 500;   // init
  if (iMaxIters >= 100000)
    iDiv = 20000;
  else if (iMaxIters > 20000)
    iDiv = 10000;
  else if (iMaxIters > 5000)
    iDiv = 2000;
  else if (iMaxIters > 2000)
    iDiv = 1000;

  return iDiv;
}
4

4 に答える 4

3

a ? b : c :

int fGetDivisor(int iMaxIters) =>
    iMaxIters >= 100000 ? 20000 :
    iMaxIters >   20000 ? 10000 :
    iMaxIters >    5000 ?  2000 :
    iMaxIters >    2000 ?  1000 :
                            500 ;

または aを使用Map<int,int>して、条件を 1 か所のみに設定します。

import 'dart:collection';

int fGetDivisor(int iMaxIters) {
  final map = new LinkedHashMap<int,int>()
    ..[99999] = 20000
    ..[20000] = 10000
    ..[ 5000] =  2000
    ..[ 2000] =  1000
    ;
  for (final step in map.keys) {
    if (iMaxIters > step) return map[step];
  }
  return 500;
}
于 2013-07-25T16:03:17.673 に答える
3

率直に言って、それらfirstWhereはそれをより複雑にしていると思います。

これは私が思い付くことができる最も簡単です:

int fGetDivisor(int iMaxIters) {
  if (iMaxIters >= 100000) return 20000;
  if (iMaxIters > 20000) return 10000;
  if (iMaxIters > 5000) return 2000;
  if (iMaxIters > 2000) return 1000;
  return 500;
}
于 2013-07-25T23:56:36.047 に答える
1
int fGetDivisor(int iMaxIters) =>
  [[999999, 20000], [20000, 10000], [5000, 2000], [2000, 1000]]
    .firstWhere((x) => iMaxIters > x[0], orElse: () => [0, 500])[1];
于 2013-07-25T17:43:14.780 に答える