20

配列を使って練習しなければなりません。ユーザーは3つの入力(毎回、アイテムに関する情報)を入力する必要があり、入力は配列に挿入されます。次に、配列を表示する必要があります。

ただし、配列内の情報を変更せずに配列の長さを増やすのに苦労しています。また、ユーザーが別の入力セットを入力できるようにするにはどうすればよいですか?これは私がこれまでに持っているものです:

public string stockNum;
public string itemName;
public string price;

string[] items = new string[3];

public string [] addItem(string[] items)
{
    System.Console.WriteLine("Please Sir Enter the stock number");
    stockNum = Console.ReadLine();
    items.SetValue(stockNum, 0);
    System.Console.WriteLine("Please Sir Enter the price");
    price = Console.ReadLine();
    items.SetValue(price, 1);
    System.Console.WriteLine("Please Sir Enter the item name");
    itemName = Console.ReadLine();
    items.SetValue(itemName, 2);
    Array.Sort(items);
    return items;
}


public void ShowItem()
{
    addItem(items);
    Console.WriteLine("The stock Number is " + items[0]);
    Console.WriteLine("The Item name is " + items[2]);
    Console.WriteLine("The price " + items[1]);
}

static void Main(string[] args)
{
    DepartmentStore depart = new DepartmentStore();
    string[] ar = new string[3];
    // depart.addItem(ar);
    depart.ShowItem();
}

したがって、私の質問は次のように要約されます。

  1. ユーザーが複数の入力バッチを入力できるようにするにはどうすればよいですか?たとえば、ユーザーが初めてアイテムに関する情報(ソケット番号、価格、名前)を入力するのに、ユーザーが別のアイテムに関する詳細情報を入力できるようにする必要がありますか?

  2. 配列に複数のアイテムがあるという仮定に基づいて、配列内の各アイテムのソケット番号、価格、および名前を表示するにはどうすればよいですか?

4

10 に答える 10

43

.NET Framework 3.5 以降では、1 次元配列の場合、次のArray.Resize<T>メソッドを使用できます。

int[] myArray = { 1, 2, 3 };
Array.Resize(ref myArray, 5);

MSDN リンクはこちらです。

于 2014-12-01T14:40:00.610 に答える
20

.NET (C#) では、配列はサイズ変更できません。JavaScript や PHP とは異なり、配列は非常に柔軟に作成され、任意の要素で拡張できます。

定義によると、デフォルトの静的配列には固定サイズがあるため、インデックスを使用してその中の要素を参照できます。( http://en.wikipedia.org/wiki/Array_data_structure#Array_resizing )しかし、動的配列について読むことができます。C# では、System.Collections.ArrayList-Object になります。( http://en.wikipedia.org/wiki/Dynamic_array )

したがって、必要なのは ArrayList-Definition または通常のリストまたはジェネリック リストのいずれかです。(System.Collections.Generic.List)

string[] items = new string[3] { "input1", "input2", "input3" };
string[] moreItems = new string[10] { "input4", "input5" };

// array to list
List<string> itemsList = items.ToList<string>();

itemsList.Add("newItem");
// or merge an other array to the list
itemsList.AddRange(moreItems);

// list to array
string[] newArray = itemsList.ToArray();
于 2011-12-21T10:47:57.080 に答える
7

私はあなたが問題について間違っているかもしれないと思います...

3つのアイテム(在庫番号、価格、名前)がより大きなオブジェクトの一部であると考えてください。今のところ、それを単に呼び出すことができますitemitemリストまたは配列にいくつかのを格納したいと思います。次のようなオブジェクト指向のアプローチを使用することを検討してください。

class Widget
{
  public int StockNum;
  public int Price;
  public string Name;

  Widget(stockNum, price, name)
  {
    this.StockNum= stockNum;
    this.Price = price;
    this.Name = name;
  }
}

これで、これらのオブジェクトのリストをインスタンス化できます。

List<Widget> items = new List<Widget>();

そしてそれらにアイテムを追加します:

for (int i = 0; i < 5; i++)
{
  //Get input from user
  System.Console.WriteLine("Please Sir Enter the stock number");
  stockNum= Convert.ToInt32(Console.ReadLine()); //This isn't very safe...

  System.Console.WriteLine("Please Sir Enter the price");
  price = Convert.ToInt32(Console.ReadLine()); //This isn't very safe...

  System.Console.WriteLine("Please Sir Enter the item name");
  name = Console.ReadLine();

  //Then add it to a new object
  Widget item = new Widget(stockNum, price, name);

  //And add this item to a list
  items.Add(item);
}
于 2009-03-09T23:39:12.373 に答える
4

割り当てで、他のコレクション クラスではなく配列を使用する必要があると仮定すると、困難な方法で物事を行う必要があります。

配列は不変です。つまり、作成後に変更することはできません。内容は変更できますが、配列のサイズは変更できません。配列を拡大または縮小する必要がある場合は、新しい項目数で新しい配列を作成し、必要な項目を古い配列から新しい配列にコピーする必要があります。

たとえば、配列を取り、偶数要素のみをコピーするとします。

int[] a = new int[] {0,1,2,3,4,5,6,7,8,9};
int[] a2 = new int[a.Length / 2];
int counter = 0;
for (int i = 0; i < a.Length; i = i + 2)
{
    a2[counter++] = a[i];
}

次に、いつでも a2 を a に割り当てることができます

a = a2;
于 2009-03-10T00:09:10.133 に答える
3

必要に応じて通常の配列を返すメソッドSystem.Collections.Generic.List<T>もあるサイズ変更可能なコレクションを提供するwhichを使用できます。.ToArray()

于 2009-03-09T23:37:12.350 に答える
2

リストを使用してから、配列に変換します。

実際、この例では、StockInfo {在庫番号、価格、アイテム名}のクラスまたは構造体が必要です。次に、データをリストに入力する必要があります。最後に、リストのToArrayメソッドを使用してStockInfo[]に変換できます。

于 2009-03-09T23:38:49.927 に答える
0

同じ問題が発生しましたが、既存のAPIクラスを拡張していたため、型を変更できず、Arrayを使用し続けなければなりませんでした。これは、既存の配列を拡張する単純なテンプレートメソッドです。

    public static T[] ExtendArray<T> ( T[] array , uint index) where T:new()
    {
        List<T> list = new List<T>();
        list.AddRange(array);

        while (list.Count < index) {
            list.Add(new T());
        }

        return list.ToArray();
    }

上記もデフォルトのコンストラクタで要素を初期化することに注意してください。

于 2011-02-08T12:35:27.280 に答える
0

代わりにArrayListを使用できますか?必要に応じてサイズが変更されます。

于 2009-03-09T23:37:55.107 に答える
0

予想される最大の配列と同じ大きさの配列を使用して、配列のサイズを変更できないという「問題」を回避できます。これは構造化プログラミングではなく、ハッキングと見なされることに注意してください。

于 2011-12-21T11:24:51.597 に答える
0

System.Linq にアクセスできる場合は、配列などの IEnumerable オブジェクトに便利な拡張メソッドConcatを使用できます。これにより、配列を拡張できます。

int[] result = new int[] { 1, 2 };
int[] extend = new int[] { 3, 4 };

result = result.Concat(extend).ToArray();

foreach (int i in result)
{
    Console.WriteLine(i.ToString());
}

結果:
1
2
3
4

于 2013-01-22T18:39:21.703 に答える