2017-03-16 8 views
-1

私は4つの文字列の各グループのオブジェクトを作るために解析したい文字列を持つ配列を持っています。 for-loopでこれを行うことはできますか?文字列配列から要素のグループを取得するC#

グループを識別する唯一のことは、各グループに4つの文字列が含まれることです。

この配列は次のようになります。先頭の値 "NumberOfItemsInArray"は、いくつのアイテムグループが続くかを示す数字になります。アイテムの数は動的です。

NumberOfItemsInArray 
Item1-Name 
Item1-Price 
Item1-DiscountRate 
Item1-Category 
Item2-Name 
Item2-Price 
Item2-DiscountRate 
Item2-Category 

これをきれいに行う方法はありますか?

+0

具体的な問題**を明確にするか、詳細を追加して必要なものを正確に強調してください。現在書かれているとおり、あなたが求めていることを正確に伝えるのは難しいです。この質問を明らかにするには、[How to Ask](http://stackoverflow.com/help/how-to-ask)ページを参照してください。 –

+0

基本的には、記述したような配列をループし、4つの文字列のすべてのグループを新しい別の配列に変換したいと思います。 for-loopでこれをどうやってやるの? –

+0

何を試しましたか? –

答えて

2

、それはあなたの入力文字列の配列、MyArrayという与えられた、かなり単純である必要がありますが、4弦(a、b、c、dを)かかりYourObjectのためのいくつかのコンストラクタを持っていると仮定すると、出力List<YourObject> YourObjectList:

int iItems = System.Convert.ToInt32(MyArray[0]); 
for (int i = 0; i < iItems; i+=4) 
    YourObjectList.Add(new YourObject(MyArray[i+1], MyArray[i+2], MyArray[i+3], MyArray[i+4])); 
右であるべきである

は -
かかわらず、コンパイラによってそれを実行していない - ジョン

+0

で配列を記述してくださいこれはうまくいきました、ありがとう! –

0

はあなたの配列の長さに基づいて、4つのグループの数を決定します。次に元の配列を反復し、4つのグループの配列を入力します。

string[] itemsArray = { "8", "a", "b", "c", "d", "e", "f", "g", "h" }; 

    int nGroups = (itemsArray.Length - 1)/4; 
    string[][] groups = new string[nGroups][]; 

    for (int i = 0; i < nGroups; i++) { 
     print("- new group of four -"); 
     groups[i] = new string[4]; 
     for (int j = 0; j < 4; j++) { 
      groups[i][j] = itemsArray[i * 4 + j + 1]; 
      print(groups[i][j]); 
     } 
    } 

出力:あなたはArray.Lenghtを持っている、と私はあなたの配列が配列ではないと思われるので、NumberOfItemsInArrayは、かなり無用に見える

- new group of four - 
a 
b 
c 
d 
- new group of four - 
e 
f 
g 
h 
0

が、私はこれを見れば、それは、辞書だと思います:

using System; 
using System.Collections.Generic; 

namespace Program { 
    class _Main { 
     // Initialize dictionary with values 
     static Dictionary<string, string> dictionaryWithStrings = new Dictionary<string, string> { 
      { "NumberOfItemsInArray", "2" }, 
      { "Item1-Name", "Some name" }, 
      { "Item1-Price", "0.5$" }, 
      { "Item1-DiscountRate", "?%" }, 
      { "Item1-Category", "Some category" }, 
      { "Item2-Name", "Other name" }, 
      { "Item2-Price", "4$" }, 
      { "Item2-DiscountRate", "24%" }, 
      { "Item2-Category", "Other category" } 
     }; 
     // Create *dynamic* list with Item's 
     static List<Item> objects = new List<Item>(); 
     static void Main() {    
      // "- 1" removes the NumberOfItemsInArray from count 
      // "/ 4" Since you have always 4 strings 
      for (int i = 1; i <= (dictionaryWithStrings.Count - 1)/4; i++) { 
       objects.Add(new Item { 
        Name = dictionaryWithStrings["Item"+i+"-Name"], 
        Price = dictionaryWithStrings["Item"+i+"-Price"], 
        DiscountRate = dictionaryWithStrings["Item"+i+"-DiscountRate"], 
        Category = dictionaryWithStrings["Item"+i+"-Category"] 
       }); 
      } 
      Console.WriteLine("objects contains [" + objects.Count + "] items, values:"); 
      foreach (Item item in objects) { 
       Console.WriteLine("Item id: [" + objects.IndexOf(item) + 
        "], Name: [" + item.Name + 
        "], Price: [" + item.Price + 
        "], DiscountRate: [" + item.DiscountRate + 
        "], Category: [" +item.Category + "]" 
       ); 
      } 
     } 
     struct Item { 
      public string Name; 
      public string Price; 
      public string DiscountRate; 
      public string Category; 
     } 
    } 
} 
関連する問題