[解決済み] C#の配列に「プッシュ」する最適な方法
質問
こんにちは
これはかなり広く議論されている問題であることは分かっていますが、決定的な答えが見つからないようです。リストを使って私が求めていることができるのは知っていますが、それでは私の問題を解決できません。
私は初級C#のクラスを教えています。私はPHPとJava Scriptのバックグラウンドがあるため、これらの言語の観点から考える傾向があります。
リストを使用することはできません。なぜなら、これらは現在私が教えているシラバスの一部ではないからです(学期の後半には出てきますが)。
したがって、私は、初心者コーダーに悪い習慣を教えることなく理解できる、Java array.push(newValue)タイプのシナリオを実行する最も簡単な方法を探しています。
これまで、私がどのようにこの問題に取り組んできたかを紹介します。
for (int i = 0; i < myArray.Length; i++)
{
if(myArray[i] == null)
{
myArray[i] = newValue;
break;
}
}
私はただ、これが受け入れられるアプローチなのか、私が彼らに悪い習慣を教えているのか、あるいは私の目標を達成するためのより良い/より簡単な方法があるのかを知る必要があります。
EDIT 問題の核心は、要素を配列の最初の空のスロットに追加する必要があるということで、Javaのpush関数がそうなるように。
何かアドバイスがあれば、ぜひお願いします。
解決方法は?
array.push
というのは
List<T>.Add
. .NETの配列はサイズが固定されているので、実際に新しい要素を追加することはできません。 できることは、元の配列より1要素大きい新しい配列を作成し、その最後の要素を設定することだけです、例えば。
Array.Resize(ref myArray, myArray.Length + 1);
myArray[myArray.GetUpperBound(0)] = newValue;
EDIT
この質問に対する編集を考えると、この回答が実際に適用されるかどうかわからないのですが。
この問題の核心は、要素を 配列の最初の空いたスロットは、Javaのプッシュ関数がそうです。
私が提供したコードは、効果的に要素を追加します。 もし、最初の空の要素を設定することが目的なら、このようにすることができます。
int index = Array.IndexOf(myArray, null);
if (index != -1)
{
myArray[index] = newValue;
}
EDIT
このロジックをカプセル化し、値が配置されたインデックス、または空の要素がない場合は -1 を返す拡張メソッドを紹介します。 このメソッドは値の型に対しても機能し、その型のデフォルト値を持つ要素を空として扱うことに注意してください。
public static class ArrayExtensions
{
public static int Push<T>(this T[] source, T value)
{
var index = Array.IndexOf(source, default(T));
if (index != -1)
{
source[index] = value;
}
return index;
}
}
関連
-
[解決済み] [Solved] 1つ以上のエンティティで検証に失敗しました。詳細は'EntityValidationErrors'プロパティを参照してください [重複]。
-
[解決済み] エンティティタイプ ApplicationUser は、現在のコンテキストのモデルの一部ではありません。
-
[解決済み】バックスラッシュを含むパス文字列のエスケープシーケンスが認識されない件
-
[解決済み】Swashbuckle/Swagger + ASP.Net Core: "Failed to load API definition" (API定義の読み込みに失敗しました
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] 配列からArrayListを作成する
-
[解決済み] 配列に特定のインデックスで項目を挿入する方法 (JavaScript)
-
[解決済み] Java の配列を表示する最も簡単な方法は何ですか?
-
[解決済み】オブジェクトの配列を文字列のプロパティ値でソートする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Ajax処理で「無効なJSONプリミティブ」と表示される件
-
[解決済み】ASP.NET Core Dependency Injectionのエラーです。アクティブ化しようとしているときに、タイプのサービスを解決できません。
-
解決済み] Critical error detected c0000374 - C++ dll returns pointer off allocated memory to C# [解決済み] Critical error detected c0000374 - C++ dll returns pointer off allocated memory to C#.
-
[解決済み】Sequence contains no matching element(シーケンスにマッチする要素がない
-
[解決済み】C# - パスに不正な文字がある場合
-
[解決済み】2つ(またはそれ以上)のリストを1つに統合する(C# .NETで
-
[解決済み] 2つのリストを結合する
-
[解決済み】aspNetCore 2.2.0 - AspNetCoreModuleV2 エラー
-
[解決済み】名前 'ViewBag' が現在のコンテキストに存在しない - Visual Studio 2015
-
[解決済み】スレッド終了またはアプリケーションの要求により、I/O操作が中断されました。