2017-04-23 97 views
-2

我有一維數組:C#:拆分一維數組二維數組

string[] Technology = new [] {Smartphone, Laptop, Tablet, Desktop, Server, Mainframe}; 

我怎麼能分成兩半這一點,並把兩個部分成一個更大的二維陣列,使得下面都返回true

// categorizedTechnology[0].SequenceEquals(new [] {Smartphone, Laptop, Tablet}); 
// categorizedTechnology[1].SequenceEquals(new [] {Desktop, Server, Mainframe}); 
+0

是做什麼用的邏輯歸類你的技術怎麼樣? – squillman

+0

@squillman這個數組只是被拆分成兩個 – ComputersAreCool

回答

0

如果你恰好有6個項目,你可以這樣做:

string[] Technology = new string[6] { "Smartphone", "Laptop", "Tablet", "Desktop", "Server", "Mainframe" }; 

var firstChunk = Technology.Take(3); 
var secondChunk = Technology.Skip(3).Take(3); 

string[,] array2D = new string[,] { 
    { firstChunk.First(), firstChunk.Skip(1).First(), firstChunk.Last()}, 
    { secondChunk.First(), secondChunk.Skip(1).First(), secondChunk.Last()} }; 

或者乾脆做到這一點:

string[,] array2D = new string[,] { 
     { Technology[0], Technology[1], Technology[2]}, 
     { Technology[3], Technology[4], Technology[5]} }; 
+0

,這會給他兩個一維數組,而不是一個二維的 – Nino

+0

@Nino謝謝。編輯我的答案。 – CodingYoshi

+0

@CodingYoshi謝謝CodingYoshi! – ComputersAreCool

0

如果你想這樣做明確指定有多少物品進入哪個箱,那麼你需要創建另一個數組來保存類別。我選擇使用'bool'數組來指示每個項目是否可移植。然後我將這兩個數組壓縮在一起,並將它們過濾爲便攜式或非便攜式。

string[] technology = new string[] { "Smartphone", "Laptop", "Tablet", "Desktop", "Server", "Mainframe" }; 
bool[] isPortable = new bool[] { true, true, true, false, false, false }; 
string[][] categorizedTechnology = new string[][] 
{ 
    technology.Zip(isPortable, (tech, test)=> test?tech: null).Where(tech=> tech!=null).ToArray(), 
    technology.Zip(isPortable, (tech, test)=> test?null: tech).Where(tech=> tech!=null).ToArray() 
}; 

但是,這仍然不是正確的做法。這裏面向對象的編程很重要,因爲技術是類別信息需要像類或結構一樣合併到單個實體中。

這是它會是什麼樣使用類和LINQ

public class Technology 
{ 
    public string Name { get; set; } 
    public bool IsPortable { get; set; } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     Technology[] list = new Technology[] { 
      new Technology() { Name="Smartphone", IsPortable=true }, 
      new Technology() { Name="Laptop", IsPortable=true }, 
      new Technology() { Name="Tablet", IsPortable=true }, 
      new Technology() { Name="Desktop", IsPortable=false }, 
      new Technology() { Name="Server", IsPortable=false }, 
      new Technology() { Name="Mainframe", IsPortable=false }, 
     }; 

     Technology[][] groupedTechnology 
      = list.GroupBy((tech) => tech.IsPortable) 
       .Select((group) => group.ToArray()).ToArray(); 
    } 
}