2016-11-14 6 views
-1

私はPHPで作業しており、彼のディナミック配列を非常に巨大に利用しています。PHP配列のシンプルさ#

今、私はC#で働いていると私は似たような探しています。

これがポイントです:

私はデータベースでクエリを作成し、それは私に5つのフィールドを持つレコードセットを返す:

  • 名前の人
  • 型シフト
  • を仕事のシフトの数
私はあなたが私が作成した1行に知っているように、私は私のレコードセットの一つのレコード

arrWork = array(); 

arrWork[$rs["Name"]][$rs["Date_shift"]][$rs["type_shift"][$rs["shift"]] += rs["minute_work"]; 

を持っているの$ RSにこの

(PHP CODE) のような多次元配列をその場で作成したい

配列のすべての次元。 C#で

私はハッシュテーブルでこれを行うにはありますが、私はすべてのレベルをチェックする必要がある、と私は非常に時間がこれを管理するには高価だと思います。

C#で

+1

質問は100%ではありませんが、私は行きます。 '文字列[] arrWork =新しい文字列[] {rs.Name、(日時)(rs.Date_shift).ToShortDateString()、rs.type_shift、(rs.shift + rs.minute_work).ToString()};'これを移入指定された値を持つインスタンス化時の配列 –

+0

'C#'はコンパイルされる言語であり、 'PHP'は解釈される言語であることに注意してください。パフォーマンスは賢明ですが、大きな違いがあります。 – Xorifelse

+1

'php arrays simplicity in c#'は良い質問ではありません。私はあなたが 'C#で多次元配列を作成するための'最速/最もエレガントな方法 'のようなものを意味すると思いますか?' – mmcrae

答えて

1

をPHPの配列の単純さを持っている任意の方法は、言語の実際のような宣言型の構文と型の安全性のC#プログラマがたくさんあります。あなたのニーズを完全に満たす答えはないと思います。 :)

public class ValueOrDictionary : IDictionary<object, ValueOrDictionary> 
{ 
    private readonly IDictionary<object, ValueOrDictionary> storage = new Dictionary<object, ValueOrDictionary>(); 
    private object value; 
    private bool isValue = false; 

    public ValueOrDictionary this[object key] 
    { 
     get 
     { 
      if (isValue) 
      { 
       throw new InvalidOperationException(); 
      } 

      ValueOrDictionary subLevel; 
      if (!storage.TryGetValue(key, out subLevel)) 
      { 
       subLevel = new ValueOrDictionary(); 
       storage[key] = subLevel; 
      } 

      return subLevel; 
     } 
     set 
     { 
      storage[key] = value; 
     } 
    } 

    public object Value 
    { 
     get 
     { 
      return value; 
     } 
     set 
     { 
      this.value = value; 
      isValue = value != null; 
     } 
    } 

    // ... rest of IDictionary<,> implementation 

あなたはその後、以下のようにこれを使用することができても

は、私はそれに打撃を与えた:

ValueOrDictionary arr = new ValueOrDictionary(); 
arr["a"]["b"].Value = 8; 
int myvalue = (int)arr["a"]["b"].Value; 

辞書内の各「レベル」は「値コンテナ」を兼ねてこの道。最後に

あなたが最初にアプリケーションを書いていくつかの時間を勝つかもしれないが、私はあなたのコンパイラは、もはやあなたがそれぞれの値の種類を判別するのに役立ちますので、あなたがアプリケーションを維持たくさんのより多くの時間を費やしていないと思います。

あなたが現在使用しているものにハングアップの場合にもたくさん難しく、あなたの同僚や、ここSO上からごPHPC#コードのヘルプを得ることになります。

+0

ありがとう、あなたの例は非常に興味深いです、私はそれを試してみましょう。とにかく、私はハッシュテーブルを使用してすべてのレベルをチェックするために使用する瞬間... –