質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

1回答

11909閲覧

Dictionaryでaddした順序と同じ順序でforeach文等により取得できるが、それを前提とした処理を書いていいものか

naitou

総合スコア141

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2020/05/05 15:57

System.Collections.Generic.Dictionaryのソースコード(フレームワーク4.6)を読んだところ、
addした順に内部で保持してる構造体配列に若番から追加しており、同じ順序でforeach文等により取得できます。
削除後に追加した場合は削除した部分に入れられた順序となります。

しかし、Microsoftの公式ドキュメントを読む限りだと、この順序性の保証はうたわれていない様に思われます。
その為、将来的なフレームワークのバージョンアップで実装が変わり、
ダメになる可能性もあるということで、それを前提として処理を書くのはまずい様な気がしたのですが、
皆さんの意見を聞きたく質問させて頂きました。

例えば、
変わる可能性は現実的にないから気にしなくていいとか
動作保証フレームワークが限定されるプロダクトならとりあえずいいんじゃないとか

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2020/05/05 16:00

だめです。
退会済みユーザー

退会済みユーザー

2020/05/06 00:18

SortedList とか SortedDictionary を使っては?
hihijiji

2020/05/07 01:57 編集

そこまで調べて何故 いい と言う意見が出ると思ったのですか? foreachする時に順序が必要なら、その時に並び替えるのが 普通だと思うけど…
naitou

2020/05/07 08:36

皆さんご意見ありがとうございました。昔どこかのブログで同じ順序になるからOKみたいな記述を見たことがあり、頭の片隅にあったものの、今回それを利用したコードに遭遇して本当に良いものか悩んでいました。 この順序に頼ってはいけないということで、気をつけたいと思います。
guest

回答1

0

ベストアンサー

追記

.NET 9でジェネリック版が追加されました(今更何故?^^;
What's new in .NET libraries for .NET 9 | Microsoft Learn
OrderedDictionary<TKey,TValue> クラス (System.Collections.Generic) | Microsoft Learn


OrderedDictionary クラス (System.Collections.Specialized) | Microsoft Docsってのがあるのですが、非ジェネリック版しかないんですよね。

それが気に食わない人は、自作しているんじゃないでしょうか。

A Generic OrderedDictionary in C# - CodeProject
NuGet Gallery | SoftCircuits.OrderedDictionary 1.0.2
jehugaleahsa/truncon.collections.OrderedDictionary: A generic version of the .NET OrderedDictionary

雑に検索して見つけたものです(試したわけでも勧めるわけでもありません)

投稿2020/05/05 17:52

編集2024/08/31 17:50
TN8001

総合スコア9862

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問