2016-03-21 134 views
0

我想用名稱和一些數字(它們是字符串)的值創建一個字符串數組我想將它們傳遞給一個函數,該函數將採用數組,然後將它們拆分爲一個對象交錯數組(1個陣列串和1個陣列的整數)
陣列是:將字符串數組拆分爲鋸齒形對象數組

string[] str= { "toto", "the", "moto", "my", "friend","12","13","14","99","88"}; 

和函數看起來像這樣:

public object[][] bloop (string[] bstr) 
{ 

} 

最新下?

+9

下一步:您向我們展示您嘗試過的方法。 – Noctis

+0

http://pastebin.com/DHPRuDTu – N3wbie

回答

0
public static object[][] bloop(string[] bstr) 
    { 
     object[][] result = new object[2][] { new object[bstr.Length], new object[bstr.Length] }; 
     int sFlag = 0, iFlag = 0, val;    
     foreach (string str in bstr) 
      if (int.TryParse(str, out val)) 
       result[1][iFlag++] = val; 
      else 
       result[0][sFlag++] = str; 
     return result; 
    } 
+0

看來,你已經分配*太多項目*與'新對象[bstr.Length] ';這就是爲什麼'bloop'的尾部項目是'null's –

+0

是的,你是對的,我們無法預測有多少字符串/整數會在那裏,我們可以通過使用通用集合/列表和自動增量能夠數組來避免。 –

3

您的場景看起來很糟糕,可能會導致錯誤和性能問題。更好的方法是更改​​使用通用List<>或類似的代碼。但在目前的問題中,您可以使用以下代碼:

public object[][] bloop (string[] bstr) 
{ 
    var numbers = new List<int>(); 
    var strings = new List<string>(); 
    var result = new object[2][]; 

    foreach(var str in bstr) 
    { 
     int number = 0; 
     if(int.TryParse(str, out number)) 
     { 
      numbers.Add(number); 
     } 
     else 
     { 
      strings.Add(str); 
     } 
    } 

    result[0] = strings.ToArray(); 
    result[1] = numbers.ToArray(); 

    return result; 
} 
0

我同意您的要求聽起來很奇怪,應該用不同的方法解決。然而,這會做你想要什麼:

public T[][] Bloop<T>(T[] items) 
{ 
    if (items == null) throw new ArgumentNullException("items"); 
    if (items.Length == 1) return new T[][] { items, new T[] { } }; 

    int firstLength = (int) Math.Ceiling((double)items.Length/2); 
    T[] firstPart = new T[firstLength]; 
    Array.Copy(items, 0, firstPart, 0, firstLength); 
    int secondLength = (int)Math.Floor((double)items.Length/2); 
    T[] secondPart = new T[secondLength]; 
    Array.Copy(items, firstLength, secondPart, 0, secondLength); 
    return new T[][] { firstPart, secondPart }; 
} 

你的樣品:

string[] str= { "toto", "the", "moto", "my", "friend","12","13","14","99","88"}; 
string[][] result = Bloop(str); 

如果需要第二個數組int[]可以使用下列內容:

int[] ints = Array.ConvertAll(result[1], int.Parse); 
+0

這是我的解決方案:http://pastebin.com/DHPRuDTu,但沒有工作 – N3wbie

0

的LINQ解決方案。

你有兩組:第一個具有可解析爲int和第二組包含所有其他物品,所以GroupBy看起來很自然:

public Object[][] bloop(string[] bstr) { 
    if (null == bstr) 
    throw new ArgumentNullException("bstr"); 

    int v; 

    return bstr 
    .GroupBy(x => int.TryParse(x, out v)) 
    .OrderBy(chunk => chunk.Key) // let strings be the first 
    .Select(chunk => chunk.ToArray()) 
    .ToArray(); 
} 

測試:

string[] str = { "toto", "the", "moto", "my", "friend", "12", "13", "14", "99", "88" }; 

// toto, the, moto, my, friend 
// 12, 13, 14, 99, 88 
Console.Write(String.Join(Environment.NewLine, 
    bloop(str).Select(x => String.Join(", ", x))));