Swift転職なら=>【LevTech】
↑クリックして拡大
↑クリックして拡大
↑クリックして拡大
↑クリックして拡大

頭痛が減ったので共有です!

rebuild.fmを応援しています!

HOME > ランダムに分散する

ランダムに分散する

100あるものを微妙にちらして分割する関数が必要だったのですが、なかったので自作してみました(randiなのかな?)。例えば、100を4つにわけるときに、 25 の4つではなくて、23, 21,17,19 の様に微妙にずれた結果を配列で返す処理です。ソース汚い、、、、。本当は数学で正しい取得方法が あるのかと思いますが、よくわかりませんのでゴリゴリ作成。

参考:指定の平均値と分散をもつ正規分布からの乱数
参考:乱数配列の作成
参考:randi

やってみた

以下関数を実行すると、適当に分散された数値の結果が帰ってきます。



 let divArr:Array = self.devideRandom(300, split: 8, yurep: 5);

 // ランダムに分散する関数
 // target = ターゲットになる元の数字
 // split = 分散する値
 // yurep = ずらすパーセント 0~ 100 %
 func devideRandom(target:Int, split:Int, yurep:Int)->Array{
        
        
        var _total = target;
        var _retArr:Array = Array();
        let _yure = Int( _total / split) * yurep/100;
        let _yuragi:Int = Int(_total / split / _yure);
        let _lastIndex:Int = split-1;
        
        for (var i=0;i < split; i++){
            
            if (i == _lastIndex){
                _retArr.append(_total);
                break;
            }
            
            let _standard = _total/(split-i);
            let _randInt:UInt32 = arc4random_uniform(UInt32(_yuragi));
            let _onoff:UInt32 = arc4random_uniform(2);// + か マイナスか
            
            var ret:Int = 0;
            if (_onoff % 2 == 0){
                ret = _standard + Int(_randInt);
            }else{
                ret = _standard - Int(_randInt);
            }
            
            _retArr.append(ret);
            _total = _total - ret;
            
        }
        
        return _retArr;
    }

 print (divArr);
 以下のような感じに出力されました。
 8
20
67
75
35
14
22
59
 

↓ yure引数を100にした場合(ゆれていない)の配列で分散した場合

サンプル画像

↓ yurep引数を5にした場合(ゆれてる)の配列で分散した場合

サンプル画像

まとめ

人様に見せることができない汚いソースでスイマセン、、、改善してまいります。

↓こんな記事もありますよ!

presentViewControllerで画面遷移下からビョーン

下からビョーンとUIViewControllerを出す方法を記載します。この処理も多用していたのですがこのHPになかったので追記しました。 Navigationと連動させた横へシャーと移動するスライドの関数(pop)とは違うので注意です。

UIWebView

アプリの中にWebビューを作成して外部ネットワークやローカルのhtmlやcssやjsファイルと連携する方法の説明です。

メモリの動きとポインタ

Swiftとポインターはあまり縁がないのかなと思っていたのですが、開発を進めていると 時々このUnsafePointerの名前を見ることがあります。本日はこのPointerが何を表しているかを調査してみます。
このエントリーをはてなブックマークに追加
右側のFacebookのLikeをクリック頂けると記事更新の際に通知されますので宜しければご利用下さい!