class A
{
public string dt;
public int i;
}
List<A> rows = new List<A>()
{
{ new A(){ dt = "2022-12-25 07:00:00", i = 10 } },
{ new A(){ dt = "2022-12-24 00:00:00", i = 20 } },
{ new A(){ dt = "2022-12-25 01:00:00", i = 15 } },
{ new A(){ dt = "2022-12-24 00:00:00", i = 50 } },
{ new A(){ dt = "2022-12-23 04:00:00", i = 100 } },
};
という中身がクラスAの配列があって、
・クラスAのdtを時間とみなして時刻を基準に昇順に並べ替える
・dtが重複する行は後の行を削除する
この2つの条件で並べ替えをしたいです。この例だと
{ new A(){ dt = "2022-12-23 04:00:00", i = 100 } },
{ new A(){ dt = "2022-12-24 00:00:00", i = 20 } },
{ new A(){ dt = "2022-12-25 01:00:00", i = 15 } },
{ new A(){ dt = "2022-12-25 07:00:00", i = 10 } },
という結果が得たいのですが、よろしくお願いします。
No.5ベストアンサー
- 回答日時:
C# のお話ならば LINQ を使うことになるかと思います
並び替え
https://learn.microsoft.com/ja-jp/dotnet/api/sys …
重複削除
https://learn.microsoft.com/ja-jp/dotnet/api/sys …
ご回答ありがとうございます。
そのサイトを参考にできました!
class A
{
public string dt;
public int i;
}
List<A> rows = new List<A>()
{
{ new A(){ dt = "2022-12-25 07:00:00", i = 10 } },
{ new A(){ dt = "2022-12-24 00:00:00", i = 20 } },
{ new A(){ dt = "2022-12-25 01:00:00", i = 15 } },
{ new A(){ dt = "2022-12-24 00:00:00", i = 50 } },
{ new A(){ dt = "2022-12-23 04:00:00", i = 100 } },
};
foreach (A a in rows.OrderBy(row => row.dt).DistinctBy(row => row.dt))
{
Console.WriteLine(str)(a.dt + " " + a.i.ToString());
}
なるほど、たしかにそのLINQというのを知ってればあっさりできますね(^^;
No.4
- 回答日時:
一般に「並べ替え」というと「データの個数は変えずに位置のみを変える」ってことになるから, 「dtが重複する行は後の行を削除する」は「並べ替え」とは別に処理するのがふつうだろう.
で「クラスAのdtを時間とみなして時刻を基準に昇順に並べ替える」はまあなんかの sort メソッドを使うんだろうねぇ.... 今の要求だと「元のリストにおける順序」が必要だから安定なアルゴリズムが必要なんだけど, そんなの C# にあるかなぁ. なんか検索したら「自分で作れ」的なのが見付かったんだけど.
で, 並べ替えれば「dtが重複する行」は前後に並ぶから, 後ろにあるやつを削っていく.
No.3
- 回答日時:
N0.1です、
開発環境が違ってごめんなさい。
>あとこれは重複行の削除はできているのでしょうか?・・・
重複する複数行はそのままです、同順位でソートされます。
配列の中身は手をつけません。
ご返信ありがとうございます。
いえいえ、具体的なコードを提示して頂けただけでもありがたいです。
(ただC#だったら良かったなぁ(^^;)
No.2
- 回答日時:
No.1
- 回答日時:
VC++の開発環境ですが・・・
ソート関数
extern "C" int comp(const void *a, const void *b)//CompSW = 順番or順番DIR
{
return strcmp( ( char*)b, ( char*)a ) ;//昇順
return strcmp( ( char*)a, ( char*)b ) ;//降順
}
これで呼び出す。
qsort( ( void * )StringList, List_行数, 一行文字数, comp);
StringListは準備が必要です。
ご回答ありがとうございます。
プログラムを提示してありがたいのですが、
ちょっとVC++だと自分は分からないです・・・(^^;
たしかにアルゴリズム的なことを知れてC#で応用できれば
それで問題ないかもしれませんが、並べ替えに関しては
結構C#特有の記述の仕方がありそうな気がしてまして、どうなんでしょう。
あとこれは重複行の削除はできているのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- 物理学 相対論的運動方程式 1 2022/07/04 06:20
- 工学 周波数fで表現したフーリエ変換の対称性に関する質問です。 1 2022/09/14 12:27
- 数学 f(x)=2x+∮(0~1)(x+t)f(t)dt を満たす関数f(x)を求めよ。 3 2022/07/05 22:54
- 数学 初歩がわからない 分数の計算 1 2022/03/26 11:47
- 数学 単振り子とルンゲ・タック法 1 2022/07/15 00:05
- 物理学 フーリエ変換の振幅について 1 2022/09/04 08:56
- 数学 x=r・cosθの2回微分 θ=ωtとすると? 5 2022/05/10 23:53
- 数学 微分方程式の積分定数について 5 2023/07/13 08:39
- 数学 f(x,y)=-2y/(x^2+y^2) という関数を不定積分すると、 ∫ -(2y)/(x^2 + 2 2023/06/12 20:25
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
既定のコンストラクタがありま...
-
ウインドウの移動禁止
-
静的でないメンバ関数の呼び出...
-
bccでエラー:メンバー関数は呼...
-
C++にてtemplateで受け取った任...
-
クラス間でのクラスの共有?
-
(void)0 はどんな意味ですか
-
構造体を宣言と共に初期化する方法
-
関数ポインタについて
-
const_castのつかいどころを教...
-
【gcc・cygwin】multiple defin...
-
コンパイルエラー: LNK2001
-
pictureboxの画像を削除するには?
-
typedef unsigned int UINT;が...
-
C#を勉強中でC#で壁紙を変更す...
-
VC++でGetKeyboardStateがうま...
-
void*型の配列について
-
ifstreamについて
-
戻り値を返す関数の前に(void)...
-
C# KeyDownイベントでショート...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
既定のコンストラクタがありま...
-
【gcc・cygwin】multiple defin...
-
戻り値を返す関数の前に(void)...
-
C++にてtemplateで受け取った任...
-
多重定義が起きている?--lnk20...
-
gcc: incompatible pointer type
-
静的でないメンバ関数の呼び出...
-
int main()、void main()、void...
-
Notepad++の関数リスト表示の変...
-
C# KeyDownイベントでショート...
-
C# Controls.Addで動的に配置し...
-
ArduinoでMouse関数を使用して...
-
(void)0 はどんな意味ですか
-
DLLの関数呼び出しで引数がある...
-
void*型の配列について
-
ウインドウの移動禁止
-
const_castのつかいどころを教...
-
VC++でGetKeyboardStateがうま...
-
C言語 プロトタイプ宣言
-
stddef.hって何?
おすすめ情報