3

複数の値を持つ int 配列を取得しました。その配列に要素を追加する必要があります。私はそのようにそれを解決します:

int[] myIntArray=SomeMagicThere();

List<int> intList= myIntArray.ToList();
intList.Add(88);
myIntArray= intList.ToArray();

(これは非常に単純化されています。myIntArray の型を変更できないのには十分な理由があります)

別の方法で解決しますか?2つのキャストを行うのは少し「汚い」と感じます

4

4 に答える 4

9

標準的な方法は次のようになります

Array.Resize(ref myIntArray, myIntArray.Length + 1);
myIntArray[myIntArray.Length - 1] = 88;

あなたのものほど多くの配列コピーを実行しないLINQバージョン

myIntArray = myIntArray.Concat(new[] { 88 }).ToArray();

EDIT:このLINQバージョンは、実際にはオリジナルよりも遅いです!LINQ array-to-list および list-to-array は配列の直接コピーに最適化されていますが、ConcatLINQ はシーケンスの長さを認識していないため、内部バッファーの容量に達すると複数の配列のサイズ変更とコピーが発生します。

(すでにリストに精通しているように見えるので、配列を使用する必要があると思います。)

于 2013-06-07T09:03:11.050 に答える
2

別の方法で解決しますか?

私は変更しますSomeMagicThere(もちろん、可能であれば):

public List<int> SomeMagicThere()
{
   // ...
}

List<T>内部的に配列を使用してアイテムを格納するため、パフォーマンスの遅延はありません。List<T>実際、それは配列のサイズ変更を行っており、既にある同じコードを書く理由が見当たりません。

于 2013-06-07T09:04:20.103 に答える
0

問題のある行は最初の行です:

int[] myIntArray=SomeMagicThere();

への変更:

List<int> magicInts = new List<int>(SomeMagicThere());

次に、簡単に呼び出すことができます:

magicInts.Add(88);

List<T>(IEnumerable<T>)コンストラクターは入力をそれ自体にコピーするため、配列を自分で変更することなく、項目を簡単に追加および削除できます。

于 2013-06-07T09:09:02.760 に答える