[解決済み] 配列要素の範囲を新しい配列にクローンする方法を教えてください。
2022-02-07 09:07:07
質問
10個の要素からなる配列Xがあります。X からインデックス 3 で始まりインデックス 7 で終わるすべての要素を含む新しい配列を作成したいと思います。もちろん、私は私のためにそれを行うループを簡単に書くことができますが、私は私のコードを可能な限りきれいに保ちたいと思います。C#でそれを行うことができるメソッドはありますか?
のようなものです(擬似コード)。
Array NewArray = oldArray.createNewArrayFromRange(int BeginIndex , int EndIndex)
Array.Copy
私のニーズに合わない
. 新しい配列のアイテムはクローンである必要があります。
Array.copy
は、単にC-Style
memcpy
に相当するもので、私が求めているものではありません。
どのように解決するのですか?
拡張メソッドとして追加することができます。
public static T[] SubArray<T>(this T[] data, int index, int length)
{
T[] result = new T[length];
Array.Copy(data, index, result, 0, length);
return result;
}
static void Main()
{
int[] data = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int[] sub = data.SubArray(3, 4); // contains {3,4,5,6}
}
クローンについて(最初の質問では明らかではありませんでしたが)更新しました。もし、あなたが 本当に ディープクローン;のようなものが欲しい。
public static T[] SubArrayDeepClone<T>(this T[] data, int index, int length)
{
T[] arrCopy = new T[length];
Array.Copy(data, index, arrCopy, 0, length);
using (MemoryStream ms = new MemoryStream())
{
var bf = new BinaryFormatter();
bf.Serialize(ms, arrCopy);
ms.Position = 0;
return (T[])bf.Deserialize(ms);
}
}
この場合、オブジェクトはシリアライズ可能である必要があります (
[Serializable]
または
ISerializable
) がありますが。他のシリアライザーを適当に代用することは簡単にできます -。
XmlSerializer
,
DataContractSerializer
やprotobuf-netなど。
ディープクローンはシリアライゼーションがないと厄介であることに注意してください。
ICloneable
はほとんどの場合、信用しがたい。
関連
-
[解決済み】値が期待した範囲に収まらない
-
[解決済み】Moqを使用してメソッド呼び出しを検証する
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] enumを列挙するには
-
[解決済み] 配列からArrayListを作成する
-
[解決済み] 配列に特定のインデックスで項目を挿入する方法 (JavaScript)
-
[解決済み] JavaScriptで配列の先頭に新しい配列要素を追加するにはどうすればよいですか?
-
[解決済み] 配列から最初のN個の要素を取得する方法
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] [Solved] 1つ以上のエンティティで検証に失敗しました。詳細は'EntityValidationErrors'プロパティを参照してください [重複]。
-
[解決済み】指定されたキャストが有効でない?
-
[解決済み】コンパイルエラー「未割り当てのローカル変数を使用しています」が発生したのはなぜですか?
-
[解決済み] 'SubSonic.Schema .DatabaseColumn' 型のオブジェクトをシリアライズする際に、循環参照が検出されました。
-
[解決済み】Sequence contains no matching element(シーケンスにマッチする要素がない
-
[解決済み】クロススレッド操作が有効でない。作成されたスレッド以外のスレッドからアクセスされたコントロール
-
[解決済み】リソースの読み込みに失敗した:ステータス500(内部サーバーエラー)のサーバーの応答)
-
[解決済み】ファイルへの読み書きの際に共有違反のIOExceptionが発生する C#
-
[解決済み】別のスレッドがこのオブジェクトを所有しているため、呼び出し側のスレッドはこのオブジェクトにアクセスできない
-
[解決済み】C#の配列スライス