2016-04-29 17 views
1

は、これらを1D配列または2D配列のいずれかに入れる方法です。 ?私はコードを作りましたが、これは短縮できますか?c#は配列の操作に役立つ必要があります

double worstPrice = 6.47; 
    double bestPrice = 0.99; 
    double CivetCatPrice =29.14; 
    double whenPrice = 10.50; 
    double everythingPrice = 319.56; 
    int bestStock = 3238; 
    int worstStock = 8; 
    int civetCatstock = 3; 
    int whenStock = 37; 
    int everythingStock = 2; 
+2

このコードは、配列とどんな関係があるのか​​。あなたが望むものは配列ではなくクラスです。しかし、そのクラスが概念的にどのように表現し、それを定義するかは、あなた次第です。 – David

+1

私はあなたのコードがうまく見えると思います:変数名は、変数の内容を記述します。私はそれを変更する必要がすぐにはわかりません。 – Heinzi

答えて

1

あなたは彼らのために望むなら別の方法として、あなたが自分の名前

Dictionary<string, double> priceDict = new Dictionary<string, double>(); 
priceDict.Add("worstPrice", 6.47); 
//And so on for each double 

Dictionary<string, int> stockDict = new Dictionary<string, int>(); 
priceDict.Add("bestStock", 3238); 
//And so on for each int 

値を維持するために辞書を使用することができ、この

double[] priceData = new double[]{ 6.47, 0.99, 29.14, 10.50, 319.56 }; 
int[] stockData = new int[]{ 3238, 8, 3, 37, 2 }; 

などの各ダブル、int型の配列を作ることができますこれらのように呼び出すことができます

double worstMinusBestPrices = priceData[0] - priceData[1]; //For arrays 
double worstMinusBestPrices = priceDict["worstPrice"] - priceDict["bestPrice"] //For dictionaries 
+0

ああ、多くのおかげで、ちょうどそれらの宣言の周りに私の頭を取得しようとする配列を開始しました。 –

+3

配列はクラスの***ひどい***置き換えであることに注意してください。データの意味的意味をすべて削除し、その意味を知るためにコードを消費します。リファクタリングのパターン "Replace Array with Object"を参照してください: – David

+0

@Davidしたが​​って、意味がそうでなければ失われるので、辞書を追加しました。 –

0

Alfieが指摘したように、辞書を使うこともできますが、文字列識別子で覚えておく必要があります。

もう1つの方法は、クラスまたは構造体を使用することです。そこにこれを行うには多くの方法はもちろんですが、いくつかは、次のとおりです。

public class Things 
{ 
    public double worstPrice = 6.47; 
    public double bestPrice = 0.99; 
    public double CivetCatPrice =29.14; 
    public double whenPrice = 10.50; 
    public double everythingPrice = 319.56; 
    public int bestStock = 3238; 
    public int worstStock = 8; 
    public int civetCatstock = 3; 
    public int whenStock = 37; 
    public int everythingStock = 2; 
} 

もう一つの方法は、次のようになります。

public class Things 
{ 
    public double WorstPrice { get; readonly set; } 
    public double BestPrice = { get; readonly set; } 
    // etc 

    public Things(double worstPrice, double bestPrice) // etc 
    { 
     WorstPrice = worstPrice; 
     BestPrice = bestPrice; 
    } 
} 

両方のアプローチの長所と短所があります。もう1つの可能性は、クラス/構造体のコレクションを使用して物をグループ化し、意味のある方法で集約することです。

同様:

public class Thing 
{ 
    public string ThingLabel { get; readonly set; } 
    public double ThingPrice { get; readonly set; } 
    public int ThingQuantity { get; readonly set; } 

    // the value of your stock, calculated automatically based on other properties 
    public double ThingValue { get { ThingPrice * ThingQuantity; } } 

    public Thing(string thingLabel, double thingPrice, int thingQuantity) 
    { 
     ThingLabel = thingLabel; 
     // etc 
    } 
} 

public void DoStuff() 
{ 
    List<Thing> list = new List<Thing>(); 

    Thing thing = new Thing("Civet cat", 500, 10); 

    list.Add(thing); 
    list.Add(new Thing("Sea flap flap", 100, 5); 
    list.Add(new Thing("Nope Rope", 25, 4); 

    Console.WriteLine("The value of {0}'s stock is: {1}", thing.ThingLabel, thing.Value); 
} 

さらに別の方法は、基本クラスを使用し、異なる種類のサブクラスを作成することです。可能性はほぼ無限です!あなたは今、あなたとあなたの潜在的なチームのどちらにとって、あなたにとって最良の方法を決定するだけです。

1

あなたは意味のある名前を持つproprtiesとしてこれらの値を保持しているカスタムクラスを実装することができます。その後、コードははるかに読みやすく、メンテナンス可能で堅牢になります。例えば

(あなたがこれらのクラスのすべてを必要としない、それはちょうどあなたのアイデアを与える必要があります):

public abstract class Animal 
{ 
    public Animal(string animalName) 
    { 
     this.Name = animalName; 
    } 
    //insert properties and methods which all aimals share here 
    public string Name { get; set; } 
} 

public class CibetCat : Animal 
{ 
    public CibetCat() : base("CibetCat") 
    { 
    } 

    //insert properties and methods which all CibetCats share here 
} 

今すぐあなたの価格と在庫情報を保持しているクラスなどへの参照動物自身(あなたの例ではCibetCat):

public class AnimalStock // or AnimalPrice or whatever 
{ 
    public AnimalStock(Animal animal) 
    { 
     this.Animal = animal; 
    } 

    public AnimalStock(Animal animal, decimal worstPrice, decimal bestPrice, int bestStock, int worstStock) 
    { 
     this.Animal = animal; 
     this.Worstprice = worstPrice; 
     this.BestPrice = bestPrice; 
     this.BestStock = bestStock; 
     this.WorstStock = worstStock; 
    } 

    public Animal Animal { get; set; } 
    public decimal Worstprice { get; set; } 
    public decimal BestPrice { get; set; } 

    public int BestStock { get; set; } 
    public int WorstStock { get; set; } 

    // ... 
} 

コードの多くが、複雑ではありません。その後、あなたは、単一のインスタンスから、これらすべてのプロパティ(またはそれのメソッド)にアクセスすることができます

Animal cibetCat = new CibetCat(); 
AnimalStock stock = new AnimalStock(cibetCat); 
stock.BestPrice = 0.99m; 
stock.Worstprice = 6.47m; 
stock.BestStock = 3238; 
// ... 

:今、あなたはこのシンプルで読みやすいコードを書くことができます。

Console.WriteLine("Animal's best-price is: {0}", stock.BestPrice); // etc 
関連する問題