2022/08/29

配列内の数値で順位付け

 配列に入れたデータを元にその要素の配列内での順位を求めたかったので方法をちと考えてみた。使うのはArray.SortとArray.BinarySearch。まあ、単純に配列に入ったデータをソートしてそのインデックスを求めれば順位になるかと考えて、同じデータを持つ配列をソートして元データをバイナリーサーチしてみた。小さい順ですが、大きい順も応用可能かな。

int[] ar = {4,7,2,8,5,9,3};
int[] sortedAr = new int[ar.Length];
Array.Copy(ar, sortedAr, ar.Length);
Array.Sort(sortedAr);
int iRank = Array.BinarySearch(sortedAr,ar[求めるインデックス])+1;
なんかもっとスマートな方法もありそうだけど、取敢えずこれでも出来た。

2022/08/20

開発中のアプりをダークモード対応する為に色々と

 ここ最近調べてたんですが奥が深い(笑) そもそもVisual Studio 2022のインストールオプションから変更が必要でした。

・[ワークロード]タブで[.NET デスクトップ開発]を選択し(これは当然してました)、[インストールの詳細]ウィンドウで[Windows App SDK C# テンプレート]を選択
・[個別のコンポーネント]タブで[SDK、ライブラリ、およびフレームワーク]セクションの[Windows 10 SDK(最新の奴)]と[Windows 11 SDK(最新の奴)](こっちはうちでは当然Windows 11なので入れた)

で、WinUI(C#)用 Template Studioもインストールする。


ここまでやって、ふと、今のプロジェクトは上の後で再度作り直さなきゃダメ?orz まあ、自分で色々とやる技量も自信もないので、新たに作ったプロジェクトに移行する作業をしてみます。

2022/08/08

リーディング

 騎手データ表示でリーディングってか順位表示しようかとSQL調べてました。RANK()使うんだとは直ぐに分かったけど、テーブル一覧表示なら素直にRANK()で行けるのは理解しましたが、今回は特定の騎手データ表示時にその騎手の順位を表示する方法に少し悩みました。

SELECT RANK() OVER(ORDER BY 一着回数 DESC, 二着回数 DESC) AS 順位 FROM 騎手マスタ
てな感じまでは調べると分かったが、実際に該当騎手のデータ表示時に順位を得るには
SELECT s.順位 FROM(順位のSQL) AS s WHERE s.騎手コード = @KCD
とする必要があり、
SELECT s.順位 FROM(SELECT 騎手コード, RANK() OVER(ORDER BY 一着回数 DESC, 二着回数 DESC) AS 順位 FROM 騎手マスタ) AS s WHERE s.騎手コード = @KCD
で何とか取得出来た。一着のみだと同位になる事がありそうなので二着まで考慮してみた。まあ、これが十分なのかはなんともだけど😉

追記2022.8.13
順位には結局一着二着だけではダメな感じなのは分かったので処理速度的にそれ程問題にならない感じだったので五着まで降順で、着外だけ昇順にして求める事にしました。着外だけは少ない方が上位かなっと😉